Pourquoi ces trois fonctions ne renvoient-elles pas leur argument non évalué comme la première ? Existe-t-il un moyen de faire en sorte que les deux dernières fonctionnent comme la première ? À l'intérieur de la fonction, `e` reste non évalué ; cela semble se produire lors du renvoi du résultat.
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
À l'intérieur de la fonction, e n'est pas évalué, comme prévu :
ns:bart = function( {e}, Show( Name Expr(e) ) );
ns:bart( expr( notavar ) ); // expected, unevaluated
Il existe une solution de contournement peu convaincante consistant à copier la fonction dans l'espace de noms par défaut actuel, bien qu'elle ne résolve pas le problème des appels de fonctions imbriqués.
localbar = name expr( ns:bar );
show( localbar( expr( notavar ) ) ); // expected, unevaluated