Warum geben nicht alle drei Funktionen ihr nicht ausgewertetes Argument zurück, wie die erste? Gibt es eine Möglichkeit, die letzten beiden so zu gestalten, dass sie sich wie die erste verhalten? Innerhalb der Funktion ist `e` immer noch nicht ausgewertet; dies scheint beim Zurückgeben des Ergebnisses der Fall zu sein.
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
Innerhalb der Funktion e wird erwartungsgemäß nicht ausgewertet:
ns:bart = function( {e}, Show( Name Expr(e) ) );
ns:bart( expr( notavar ) ); // expected, unevaluated
Es gibt zwar eine wenig ansprechende Notlösung, indem man die Funktion in den aktuellen Standard-Namensraum kopiert, aber das löst das Problem verschachtelter Funktionsaufrufe nicht.
localbar = name expr( ns:bar );
show( localbar( expr( notavar ) ) ); // expected, unevaluated