Sto programmando un piccolo interprete di lisp / schema e mi sono imbattuto nella seguente situazione:
Quando un elenco quotato contiene lambda, non vengono analizzati come lambda. Ecco un codice di esempio ( live on repl.it ):
(define list1 '(
(lambda (x) (+ x 1))
(lambda (y) (+ y 2))
)
)
(define add1 (car list1))
(print (add1 1))
e il risultato è:
Error: ('lambda ('x) ('+ 'x 1)) is not a function [add1]
È un comportamento normale? Pensavo che i lambda fossero forme speciali che dovevano essere sempre legate.
Se è effettivamente il comportamento atteso: quando il mio parser analizza il Lambda e lo avvolge in un oggetto (diciamo, di tipo LambdaWrap) e il mio interprete restituisce quell'oggetto non valutato, allora suppongo che questo sia un comportamento sbagliato perché dovrebbe restituire invece alcuni simboli non vincolati. È giusto?