Ho presupposto che i valori passati in una funzione lisp siano assegnati a una quotazione che corrisponde al nome del parametro. Tuttavia, sono rimasto sorpreso dal fatto che:Come vengono memorizzati i parametri di funzione in lisp?
(defun test (x) (print (eval 'x)))
(test 5)
non funziona (la variabile x non è associata). Quindi se i parametri non sono memorizzati come simboli nella funzione, che cosa significa esattamente x in questo esempio? C'è un modo per accedere ai parametri da un simbolo che corrisponde al nome del parametro?
Altro contesto: Quello che vorrei fare è qualcosa di simile:
defun slice (r1 c1 r2 c2 board)
(dolist (param '(r1 c1 r2 c2)) ;adjust for negative indices
(if (< (eval param) 0)
(set param (+ (length board) (eval param)))))
;Body of function
Fondamentalmente, voglio scorrere i primi quattro parametri ed effettuare un adeguamento a qualsiasi dei loro valori, se sono < 0. Ovviamente, potrei fare un let e avere una singola riga per ogni parametro, ma considerando che sto facendo la stessa cosa per ciascuno dei quattro parametri questo sembrava più pulito. Tuttavia, ottengo l'errore che la variabile R1 non è associata.
È implementazione specifica. [SBCL] (http://www.sbcl.org/manual/index.html) fornisce alcune informazioni nel capitolo Interfaccia funzioni esterne, ecc. –