"만들면서 배우는 리스프 프로그래밍" 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 |