"만들면서 배우는 리스프 프로그래밍" 123p
스스로 변화하는 코드를 짜고 싶은가? eval은 좋은 벗이 될 것이다. 사실, 과거 인공지능 연구가가 리스프를 그토록 사랑했던 이유가 여기에 있다.
eval은 데이터를 코드로 처리하는 기능을 한다.
위에 말 처럼 스스로 변화하는 코드라는 말까지 와닫지는 않지만
데이터가 코드가 되는 살아움직이는 느낌 정도는 받는다고 해야 하려나?
eval은 리스트로 된 문장을 evaluate 한다.(재귀적인가?)
'(+ 1 2)는 단순한 데이터로 실행되지 않지만 eval에 넣으면 수행을 하게 된다.
그에 반해 apply는 머하는데 쓰는건지 조금 의아한 녀석..
매크로를 사용하면 #'+ 가 되겠지만 명시적으로  (function)을 사용해보면 위와 같이
함수에 대한 포인터(?)를 이용하여 eval에서 연산자를 제외한 동일한 형상을 띄게 된다
            
                    
                    
스스로 변화하는 코드를 짜고 싶은가? 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)))                               
 | 
함수에 대한 포인터(?)를 이용하여 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 | 
