Hello, I wonder if there is any way to bind a free symbol in a lambda in order to pass the lambda to a defined function (for example)
What I want to do is something like this: (de myf (f l) (f l)) (let l 99 (myf '((x) (+ (car x) l)) (1 2))) I want it to return 100 but it fails with an error (1 2) number expected this is because free symbol l in lambda ((x) (+ (car x) l)) is not bind by let as pretended because of quoting of lambda In other words, I think the problem is quoting avoids let binding as in: (setq f (let n 10 '((x) (+ x n)))) -> ((x) (+ x n)) but I want it to return -> ((x) (+ x 10)) or using the typicall example: (de adder (n) '((x) (+ x n))) -> ((n) '((x) (+ x n))) so (adder 1) should return ((x) (+ x 1)) but it returns ((x) (+ x n)) Is there any way to manage this? Something similar to "expand" in newlisp will do the job: newlisp: (define (badadder n) (lambda (x) (+ x n))) (badadder 3) -> (lambda (x) (+ x n)) (define (adder n) (expand (lambda (x) (+ x n)) 'n)) (adder 3) -> (lambda (x) (+ x 3)) The fist example in newlisp will be: (define (myf f l) (f l)) (let ((l 99)) (myf (lambda (x) (+ (first x) l)) '(1 2))) which fails for same reason picolisp fails but in newlisp the solution is: (define (myf f l) (f l)) (let ((l 99)) (myf (expand (lambda (x) (+ (first x) l)) 'l) '(1 2))) -> 100 thanks