2019년 1월 2일 수요일

[on lisp] 2.2 defining function 커먼리스프의 #'

2.2 Defining Functions
(defun double (x) (* x 2))
이렇게 하면 만들어짐.

커먼리스프에서 심볼은 클로저와 다르게 하나의 심볼에 함수와 값이 동시에 저장될 수 있다.
(setq double 2)

(double double)
4
double에서 변수값, 함수를 따로 어떻게 구분지어 뽑아내려면
(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)를 심볼 앞에 붙여서 넘긴다.

댓글 없음:

댓글 쓰기