ok, I've found a way to pass an expression to eval: (task -5000 (* 10 100) N 0 (tty (println (inc 'N))))
the next step is to figure a way to use @ inside that expression On Sun, May 16, 2021 at 7:14 PM polifemo <brunofrancosala...@gmail.com> wrote: > I'm studying 'trace in @lib.l, and I've run into a question. > I don't understand why must 'eval be called on the second number on the > case that the first number is negative. I'm especially confused by giving 1 > as an argument to 'eval. That's supposed to give you the context from which > to extract the value of @, but since its a number, it should never have an > @ to affect the result. If it was an expression, then I could understand, > but I've tried passing an expression as a second argument several times and > its always failed. > > My question would be, why eval the second argument, and why pass a 1 to > eval when @ does not seem to be relevant in this context? > > Here's the body of the 'trace function, as a refresher. > > (de task (Key . Prg) > (nond > (Prg (del (assoc Key *Run) '*Run)) > ((num? Key) (quit "Bad Key" Key)) > ((assoc Key *Run) > (push '*Run > (conc > (make > (when (lt0 (link Key)) > (link (+ (eval (++ Prg) 1))) ) ) #the line that > confuses me > (ifn (sym? (car Prg)) > Prg > (cons > (cons 'job > (cons > (lit > (make > (while (atom (car Prg)) > (link > (cons (++ Prg) (eval (++ Prg) 1)) ) > ) ) ) # the same pattern in another line. > Prg ) ) ) ) ) ) ) > (NIL (quit "Key conflict" Key)) ) ) > > >