Programming/lisp2013. 1. 22. 22:39
"만들면서 배우는 리스프 프로그래밍" 123p

스스로 변화하는 코드를 짜고 싶은가? eval은 좋은 벗이 될 것이다. 사실, 과거 인공지능 연구가가 리스프를 그토록 사랑했던 이유가 여기에 있다.


eval은 데이터를 코드로 처리하는 기능을 한다.
위에 말 처럼 스스로 변화하는 코드라는 말까지 와닫지는 않지만
데이터가 코드가 되는 살아움직이는 느낌 정도는 받는다고 해야 하려나?

eval은 리스트로 된 문장을 evaluate 한다.(재귀적인가?)
'(+ 1 2)는 단순한 데이터로 실행되지 않지만 eval에 넣으면 수행을 하게 된다.
> (eval (+ 1 2)) 
3                
> (eval '(+ 1 2))
3                
>                 

그에 반해 apply는 머하는데 쓰는건지 조금 의아한 녀석..
> (apply (function +) '(1 2))
3
> (apply + '(1 2))                                     
error: bad function - (apply (function +) (quote (1 2)))                              
매크로를 사용하면 #'+ 가 되겠지만 명시적으로  (function)을 사용해보면 위와 같이
함수에 대한 포인터(?)를 이용하여 eval에서 연산자를 제외한 동일한 형상을 띄게 된다


evaluate an xlisp expression
(eval <expr>)

<expr> the expression to be evaluated
returns the result of evaluating the expression

apply a function to a list of arguments
(apply <fun> <arg>...<args>)

<fun> the function to apply (or function symbol). May not be macro or fsubr.
<arg> initial arguments, which are consed to...
<args> the argument list
returns the result of applying the function to the arguments  

'Programming > lisp' 카테고리의 다른 글

lisp when/unless macro  (2) 2013.01.28
lisp 명령어 if progn  (0) 2013.01.28
xlisp에서 incf 오류  (0) 2013.01.19
lisp backquote / 유사인용  (0) 2013.01.19
lisp rem, mod  (0) 2013.01.17
Posted by 구차니