gpt4 book ai didi

lisp - 在 Scheme 中编写评估程序?

转载 作者:太空宇宙 更新时间:2023-11-03 18:53:10 24 4
gpt4 key购买 nike

我的问题不在于内置的 eval 过程,而在于如何创建它的简化版本。只是对于初学者,我希望能够在 '(+ 1 2) 中使用它并让它计算表达式 +,其中引用通常会取消计算。

我一直在思考这个问题,并发现了一些可能有用的东西:取消引号:,(准引述)(申请)

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

如有任何提示或指导,我们将不胜感激。

最佳答案

首先,如果您正在做自己正在做的事情,那么至少阅读 Metalinguistic Abstraction 的第一章就不会出错。节Structure and Interpretation of Computer Programs .


现在我提出一些建议。

对于 Scheme(或者,实际上,任何 Lisp)解释器的符号,通常的做法是在某种“环境”中查找它。如果您要编写自己的 eval,您可能希望提供自己的环境结构来配合它。您可以回退到您在其上构建 eval 的 Scheme 系统的一件事是包含诸如 + 之类的绑定(bind)的初始环境缺点等;据我所知,这不能以 100% 可移植的方式实现,因为各种 Scheme 系统提供了不同的获取初始环境的方法(包括 MIT Scheme 中的 the-environment 特殊形式和 (Petite) Chez Scheme 中的 interaction-environment... 不要问我为什么会这样),但基本思想保持不变:

(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
...))

请注意,您肯定希望检查符号命名是否为特殊形式(lambdaif 是必需的——或者您可以使用 cond 代替 if——但您可能想要更多,并且可能允许对基本集进行扩展,即宏)。使用上面的框架 eval,这必须在我称之为“应用程序表单”处理程序的地方进行,但您也可以在处理符号的地方处理它,或者可能首先放置特殊的表单处理程序,随后是常规符号查找和函数应用。

关于lisp - 在 Scheme 中编写评估程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2625843/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com