Lisp 在Scheme中编写评估程序?

Lisp 在Scheme中编写评估程序?,lisp,scheme,eval,Lisp,Scheme,Eval,我的问题不在于内置的eval过程,而是如何创建一个简单的版本。刚开始的时候,我希望能够把它放在“(+12)中,让它计算表达式+,引用通常会去掉计算 我一直在思考这个问题,发现了一些可能有用的东西: Unquote:, (准晶石) (适用) 我的主要问题是重新获得+作为一个过程而不是一个符号的价值。一旦我得到了它,我想我应该能够将它与列表中的其他内容一起使用 任何提示或指导都将不胜感激。首先,如果你正在做你正在做的事情,你至少可以阅读本节的第一章 现在我想听听自己的一些建议 对于Scheme(或

我的问题不在于内置的eval过程,而是如何创建一个简单的版本。刚开始的时候,我希望能够把它放在“(+12)中,让它计算表达式+,引用通常会去掉计算

我一直在思考这个问题,发现了一些可能有用的东西: Unquote:, (准晶石) (适用)

我的主要问题是重新获得+作为一个过程而不是一个符号的价值。一旦我得到了它,我想我应该能够将它与列表中的其他内容一起使用


任何提示或指导都将不胜感激。

首先,如果你正在做你正在做的事情,你至少可以阅读本节的第一章


现在我想听听自己的一些建议

对于Scheme(或者任何Lisp)解释器的符号,通常的做法是在某种“环境”中查找它。如果您要编写自己的
eval
,则可能需要提供自己的环境结构。有一件事你可以回到你正在构建
eval
的Scheme系统,那就是初始环境包含了
+
cons
等绑定。;据我所知,这不可能以100%可移植的方式实现,因为各种方案系统提供了不同的初始环境获取方式(包括MIT方案中的
环境
特殊形式和(小)Chez方案中的
交互环境
…不要问我为什么会这样),但基本理念保持不变:

(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
是必要的,或者您可以使用
cond
代替
if
,但您可能需要更多,并且可能允许扩展到基本集合,即宏)。对于上面的框架
eval
,这必须在我称之为“应用程序表单”的处理程序中进行,但是您也可以在处理符号的地方处理它,或者可能首先放置特殊表单处理程序,然后是常规符号查找和函数应用。

是否允许在
+
符号上使用
eval
?不,我相信关键是要编写自己的eval。它不需要像内置的那样广泛。