Hi Alex,

I was going over the evExpr functions in miniPicoLisp/PicoLisp 32 and had a
couple of questions -

If I understand correctly - if (isNil(y)) block deals with expressions such
as
(F 1 2) where F => (de F (X Y) (+ X Y)) and the else if (y != At) block
deals with the scenario where F => (de F X (for I X (prinl I))) .

My questions are as follows -

1. Why do we have this block of code? It seems to evaluate the args which
is only used in the if(isNil(y)) block. Why is it not like the "binding"
that happens in doLet - to back up the values of the symbols?
   while (isCell(y)) {
      f.bnd[f.cnt].sym = car(y);
      f.bnd[f.cnt].val = EVAL(car(x));
      ++f.cnt, x = cdr(x), y = cdr(y);
   }

2. In what scenario is the final else block used?

I think, I am essentially asking for an annotation of the evExpr function?
I'd really appreciate any pointers.

Regards,
Kashyap

Reply via email to