첫 번째로, 자신이하고있는 일을하는 경우 적어도 Metalinguistic Abstraction 섹션의 첫 번째 장인 Structure and Interpretation of Computer Programs을 잘못 읽을 수는 없습니다.
나 자신으로부터 몇 가지 제안을드립니다.
Scheme (또는 실제로는 Lisp) 해석기의 기호와 함께하는 일은 일종의 "환경"에서 그것을 찾는 것입니다. 자신 만의 eval
을 쓰려면 자체 환경 구조를 제공해야 할 것입니다. eval
을 빌드하는 Scheme 시스템으로 되돌아 갈 수있는 한 가지는 +
, cons
등의 바인딩을 포함하는 초기 환경입니다. 이것은 초기 환경 (예 : the-environment
특수 형태의 MIT 구성표 및 interaction-environment
(Petite) Chez Scheme 포함)을 사용하는 다양한 방법을 제공하기 때문에 100 % 휴대용 방식으로는 알 수없는 방식으로 달성 할 수 없습니다. ..이 왜 그런지) 나 한테 물어하지만 기본적인 아이디어는 동일하게 유지하지 않습니다 당신은 확실히 심볼 이름 여부를 특별한 형태를 확인하는 것이 좋습니다
(define (my-eval form env)
(cond ((self-evaluating? form) form)
((symbol? form)
;; note the following calls PCS's built-in eval
(if (my-kind-of-env? env)
(my-lookup form env)
;; apparently we're dealing with an environment
;; from the underlying Scheme system, so fall back to that
;; (note we call the built-in eval here)
(eval form env)))
;; "applicative forms" follow
;; -- special forms, macro/function calls
...))
주 (lambda
및 if
이 필요하다 또는 if
대신 cond
을 사용할 수 있습니다. 그러나 기본 세트 (예 : 매크로)에 더 많은 확장을 허용 할 수 있습니다. 위의 해골 eval
으로, 이것은 내가 "applicative form"핸들러라고 불리는 곳에서 일어나야 할 것이다. 그러나 당신은 심볼을 다루는 곳에서 이것을 처리 할 수도 있고, 특별한 형태의 핸들러를 먼저 놓고, 정규 심볼 검색과 함수 신청.
'+'기호에'eval'을 사용할 수 있습니까? –
아니요, 요점은 자신의 평가를 작성하는 것입니다. 내장 된 것만큼 광범위 할 필요는 없습니다. – ZuluForce
http://www.scheme.com/tspl4/examples.html#./examples:h7 – grettke