누군가가 LISP에서 적용과 평가의 차이점에 대해 설명 할 수 있습니까? 나는 그것을 이해할 수 없다.누군가가 LISP에서 적용과 평가의 차이점에 대해 설명 할 수 있습니까?
답변
apply
몇 가지 인자에 함수를 적용
(apply + 1 2 3)
;=> 6
eval
는 표현식을 평가 :
(eval '(+ 1 2 3))
;=> 6
EVAL은 Lisp의 데이터 구조로 만들어진 임의의 소스 코드를 실행합니다. 여기에는 함수 호출, 매크로 형식, 특수 형식, 변수 및 자체 평가 데이터가 포함됩니다.
APPLY는 인수 목록에 함수를 적용합니다.
더 나은 어떤 방법으로하는 것은 실제 구현을 살펴보다, 그것을 이해하기! 자세한 내용은 과 apply
의 내부 동작에 대한 매우 명확한 설명이있는 SICP의 Metric Circular Evaluator 섹션을 참조하십시오. 이 책에서 인용 :
평가 인수와 같은 표현과 환경을합니다. 표현을 분류하고 평가를 지시합니다. 평가는 평가할 표현식의 구문 유형에 대한 사례 분석으로 구성됩니다. 절차를 일반적으로 유지하기 위해 표현의 유형을 추상적으로 결정하고 표현의 다양한 유형에 대한 특정 표현에 대한 헌신을하지 않습니다. 표현식의 각 유형에는이를 테스트하는 술어와 해당 부분을 선택하는 추상적 수단이 있습니다. 이 추상 구문을 사용하면 동일한 평가자를 사용하여 구문 구문을 다른 방식으로 변경하여 언어 구문을 쉽게 변경할 수 있습니다.
적용은 두 개의 인수, 프로 시저 및 프로 시저가 적용되어야하는 인수 목록을 취합니다. Apply는 두 가지 종류로 프로 시저를 분류합니다. 프리미티브 적용을 위해 apply-primitive-procedure를 호출합니다. 프로 시저 본문을 구성하는 표현식을 순차적으로 평가하여 복합 프로 시저를 적용합니다. 복합 프로 시저의 본문 평가를위한 환경은 프로 시저가 수행하는 기본 환경을 확장하여 프로 시저의 매개 변수를 프로 시저가 적용될 인수에 바인딩하는 프레임을 포함하도록 구성됩니다.
Common Lisp'eval'은 실제로 환경 변수를 취하지 않습니다. 현재 동적 환경과 null 어휘 환경에서 표현식 인수를 평가합니다. –
- 1. 누군가가 DashO 개념을 난독 화에 대해 설명 할 수 있습니까?
- 2. 누군가가 어떻게 작동하는지 설명 할 수 있습니까?
- 3. 누군가가 runQueryOnBackgroundThread에서 내게 설명 할 수 있습니까?
- 4. 누군가가 eclipse.p2.profile을 설명 할 수 있습니까
- 5. 누군가가 VistaDB를 설명 할 수 있습니까?
- 6. 누군가가 MustOverride를 설명 할 수 있습니까?
- 7. 누군가가 라인 결말을 설명 할 수 있습니까?
- 8. javaScript : 누군가가 이것을 설명 할 수 있습니까
- 9. 누군가가 메소드 속성에 파이썬 hasattr/delattr을 설명 할 수 있습니까?
- 10. tinyxml 누군가가 이스케이프해야하는 문자를 설명 할 수 있습니까?
- 11. 누군가가 RemoteViews GC 동작을 설명 할 수 있습니까?
- 12. 누군가가 javascript prototypal inheritance를 설명 할 수 있습니까
- 13. 누군가가 LD_LIBRARY_PATH가 (유닉스) 무엇을 초보자 언어로 설명 할 수 있습니까?
- 14. 누군가가 sessionStorage 객체의 수명을 설명 할 수 있습니까?
- 15. Java Puzzlers VI에서 버그를 발견했습니다. 누군가가 설명 할 수 있습니까?
- 16. 누군가가 autovacuum_naptime 매개 변수를 설명 할 수 있습니까?
- 17. 누군가가 Haskell에서 traverse 함수를 설명 할 수 있습니까?
- 18. 누군가가 "픽셀 추적"을 PHP에서 설명 할 수 있습니까?
- 19. 누군가가 스프링 보안 BasePermission을 설명 할 수 있습니까? 생성 하시겠습니까?
- 20. 누군가가 "AND"와 "&"의 차이점을 Access에서 설명 할 수 있습니까?
- 21. 누군가가 UINavigationController setViewController와 popToViewController를 설명 할 수 있습니까?
- 22. 누군가가 비 직렬화의 내부를 설명 할 수 있습니까?
- 23. 누군가가 TYPE_INPUT_METHOD_DIALOG를 사용하는 방법을 설명 할 수 있습니까?
- 24. 누군가가 동일한 이름과 ID를 가진 여러 필드에 대해 레일즈 동작을 설명 할 수 있습니까?
- 25. 누군가가 싱글 사인온에 대해 간략하게 설명 할 수 있습니까? SSO로 openid를 사용하고 싶습니다.
- 26. 누군가가 CHESS를 Unit Testing에 처음 프로그래머에게 설명 할 의향이 있습니까?
- 27. CUBE와 ROLLUP의 차이점에 대해 알아보기
- 28. 누군가가 나에게 설명 할 다른 기능
- 29. Membase 누군가가 자신의 기술 뒤에 아이디어를 설명 할 수 있습니다
- 30. XPath는 누군가가 친절하게도 나를 설명 할 수 있습니다 발현
Common Lisp과 Emacs-Lisp과 같은 Lisp에는'+ '를 적용하기 전에 따옴표가 필요하다는 것을 알아 두십시오. 그렇지 않으면 평가할 것입니다. – Daimrod