(defun double (x) (* x 2))이렇게 하면 만들어짐.
커먼리스프에서 심볼은 클로저와 다르게 하나의 심볼에 함수와 값이 동시에 저장될 수 있다.
(setq double 2) (double double) 4double에서 변수값, 함수를 따로 어떻게 구분지어 뽑아내려면
(symbol-value 'double) (symbol-function 'double) #'double하지만 함수도 또한 변수처럼 사용될 수 있다.
(setq x #'append) (eq (symbol-value 'x) (symbol-function 'append)) T내부적으로는 defun은 첫번째 매개변수(함수 이름)의 symbol-function의 자리에 이름없는 함수를 만들어서 연갈한다고 생각하면 된다.
(defun double (x) (* x 2)) (setf (symbol-function 'double) #'(lambda (x) (* x 2)))대부분 심볼을 넘길 때, 함수임을 명확하게 하기 위해서 #'(sharp qoute)를 심볼 앞에 붙여서 넘긴다.
댓글 없음:
댓글 쓰기