¿Por qué las tres no devuelven su argumento sin evaluar como lo hace la primera? ¿Hay alguna forma de que las dos últimas funcionen como la primera? Dentro de la función, `e` sigue sin evaluarse; esto parece ocurrir cuando se devuelve el resultado.
names default to here(1);
ns = New Namespace("n");
foo = function({e}, Name Expr(e) );
ns:bar = function({e}, Name Expr(e) );
show( foo( expr( notavar ) ) ); // expected returns notavar, unevalauted
show( here:foo( expr( notavarhere ) ) ); // unexpected tries to evaluate notavarhere
show( ns:bar( expr( notavarns ) ) ); // unexpected tries to evaluate notavarns
Dentro de la función, e no se evalúa, como era de esperar:
ns:bart = function( {e}, Show( Name Expr(e) ) );
ns:bart( expr( notavar ) ); // expected, unevaluated
Existe una solución alternativa poco inspiradora que consiste en copiar la función al espacio de nombres predeterminado actual, aunque no resuelve el problema de las llamadas a funciones anidadas.
localbar = name expr( ns:bar );
show( localbar( expr( notavar ) ) ); // expected, unevaluated