From: Eduardo O. <edu...@gm...> - 2024-10-13 16:25:07
|
Hi list, these are my current notes on the semantics of makelist: --snip--snip-- format([args]) := apply(?format, append([false], args)); [a:b, b:c, c:d]; /* [b,c,d] */ ['a, a, ''a, ''''a]; /* [a,b,c,d] */ f1(o) ::= format("~a", o); /* just lispify */ f2(o) := format("~a", o); /* ev and lispify */ f1('a); /* ((MQUOTE SIMP) $A) */ f1 (a); /* $A */ f2('a); /* $A */ f2 (a); /* $B */ f1(2+3); /* 5 */ f1(lambda([], 2+3)); /* ((LAMBDA SIMP) ((MLIST)) ((MPLUS) 2 3)) */ makelist([a,b,c], a, 42,43); /* [[42,c,d], [43,c,d]] */ makelist([a,b,c], ''a, 42,43); /* [[b,42,d], [b,43,d]] */ makelist([a,b,c], ''''a, 42,43); /* [[b,c,42], [b,c,43]] */ ev ('[a,b,c], a=42); /* [42,c,d] */ ev ('[a,b,c], ''a=42); /* [b,42,d] */ ev ('[a,b,c], ''''a=42); /* [b,c,42] */ makelist([a,b,c], 'a, 42,43); /* [[42,c,d], [43,c,d]] */ makelist([a,b,c], x+y, 42,43); /* [[b,c,d], [b,c,d]] */ ev('[a,b,c], a=42); /* [42,c,d] */ ev('[a,b,c], 'a=42); /* [42,c,d] */ ev('[a,b,c], x+y=42); /* [b,c,d] */ sublis([x+y=42], '[a,b,c]); /* err */ subst ([x+y=42], '[a,b,c]); /* [a,b,c] */ subst ( '[a=42], '[a,b,c]); /* [42,b,c] */ subst ('['a=42], '[a,b,c]); /* [a,b,c] */ --snip--snip-- And here is just the bit that I don't understand, with less context: --snip--snip-- [a:b, b:c, c:d]; makelist([a,b,c], a,42,43); /* [[42,c,d], [43,c,d]] */ makelist([a,b,c], 'a,42,43); /* [[42,c,d], [43,c,d]] */ ev ('[a,b,c], a=42); /* [42,c,d] */ ev ('[a,b,c], 'a=42); /* [42,c,d] */ subst('[ a=42], '[a,b,c]); /* [42,b,c] */ subst('['a=42], '[a,b,c]); /* [a,b,c] */ --snip--snip-- Note that: the quote in the "a" did not matter in the two "makelist"s above, the quote in the "a" did not matter in the two "ev"s above, the quote in the "a" _did_ matter in the two "subst"s above. So... all my attempts to translate the "ev"s above to "subst"s have failed miserably, my mental buffer has overflown, and I can't find a way to draw the orders of evaluation in a way that explains why the quotes on some "a"s don't matter... I _guess_ that I might be able to solve that after sleeping a lot, but I thought that the question was interesting enough, and worth asking... Btw, here is a too-short version of the question. Is there a straightforward way to translate the two "ev"s below to "subst"s? How? Note the "a=42" and the "'a=42"... [a:b, b:c, c:d]; ev('[a,b,c], a=42); /* [42,c,d] */ ev('[a,b,c], 'a=42); /* [42,c,d] */ Cheers, and thanks in advance! Eduardo Ochs http://anggtwu.net/eev-maxima.html |