2012-01-15 2 views

답변

2

apply 몇 가지 인자에 함수를 적용

(apply + 1 2 3) 
;=> 6 

eval는 표현식을 평가 :

(eval '(+ 1 2 3)) 
;=> 6 
+0

Common Lisp과 Emacs-Lisp과 같은 Lisp에는'+ '를 적용하기 전에 따옴표가 필요하다는 것을 알아 두십시오. 그렇지 않으면 평가할 것입니다. – Daimrod

5

EVAL은 Lisp의 데이터 구조로 만들어진 임의의 소스 코드를 실행합니다. 여기에는 함수 호출, 매크로 형식, 특수 형식, 변수 및 자체 평가 데이터가 포함됩니다.

APPLY는 인수 목록에 함수를 적용합니다.

5

더 나은 어떤 방법으로하는 것은 실제 구현을 살펴보다, 그것을 이해하기! 자세한 내용은 과 apply의 내부 동작에 대한 매우 명확한 설명이있는 SICP의 Metric Circular Evaluator 섹션을 참조하십시오. 이 책에서 인용 :

평가 인수와 같은 표현과 환경을합니다. 표현을 분류하고 평가를 지시합니다. 평가는 평가할 표현식의 구문 유형에 대한 사례 분석으로 구성됩니다. 절차를 일반적으로 유지하기 위해 표현의 유형을 추상적으로 결정하고 표현의 다양한 유형에 대한 특정 표현에 대한 헌신을하지 않습니다. 표현식의 각 유형에는이를 테스트하는 술어와 해당 부분을 선택하는 추상적 수단이 있습니다. 이 추상 구문을 사용하면 동일한 평가자를 사용하여 구문 구문을 다른 방식으로 변경하여 언어 구문을 쉽게 변경할 수 있습니다.

적용은 두 개의 인수, 프로 시저 및 프로 시저가 적용되어야하는 인수 목록을 취합니다. Apply는 두 가지 종류로 프로 시저를 분류합니다. 프리미티브 적용을 위해 apply-primitive-procedure를 호출합니다. 프로 시저 본문을 구성하는 표현식을 순차적으로 평가하여 복합 프로 시저를 적용합니다. 복합 프로 시저의 본문 평가를위한 환경은 프로 시저가 수행하는 기본 환경을 확장하여 프로 시저의 매개 변수를 프로 시저가 적용될 인수에 바인딩하는 프레임을 포함하도록 구성됩니다.

+2

Common Lisp'eval'은 실제로 환경 변수를 취하지 않습니다. 현재 동적 환경과 null 어휘 환경에서 표현식 인수를 평가합니다. –

관련 문제