나는 lisp 함수에 전달 된 값이 매개 변수 이름과 일치하는 견적에 할당되었다고 가정했습니다. 그러나 나는 이렇게 놀랐다 :함수 매개 변수는 어떻게 lisp에 저장됩니까?
(defun test (x) (print (eval 'x)))
(test 5)
(변수 x는 언 바운드 임). 따라서 매개 변수가 함수의 기호로 저장되지 않으면이 예제에서 정확히 IS x는 무엇입니까? 매개 변수 이름과 일치하는 기호에서 매개 변수에 액세스하는 방법이 있습니까?
더 많은 상황 :
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
는 기본적으로, 나는 그들이 <을 경우 그 값의에 처음 네 개의 매개 변수를 통해 반복하고 조정을 할 : 내가하고 싶은 무엇 이 같은 것입니다 물론, 나는 let을 할 수 있고 각 매개 변수에 대해 개별적인 행을 가질 수 있지만,이 4 개의 매개 변수 각각에 대해 똑같은 일을한다고 생각하면 이것은 더 깔끔하게 보입니다. 그러나 변수 R1이 바인딩되지 않았다는 오류가 발생합니다.
그것은 특정 구현 :
한 가지 방법은 자신이 매크로 것이 반복하지 않도록합니다. [SBCL] (http://www.sbcl.org/manual/index.html)에서는 Foreign Function Interface 장 등에 몇 가지 정보를 제공합니다. –