我正在用纯 C 实现一个 Lisp 解释器,并且在从 C 转换到 Lisp 时遇到了麻烦。
按照 Peter Norvig 在他的博客文章中的步骤,我有一个 REPL,它到目前为止将 Lisp 表达式解析为 Lisp 数据结构,并将生成的数据结构序列化回一个 lisp 表达式,如下所示:
我也实现了Paul Grahm描述的七个原语,并且理解了其中的元循环求值器。我的麻烦在于编写 C 代码的一部分(不是lisp!),一旦它被解析(“eval”)部分,它就会在上面显示的图像中实际执行数据结构。
据我了解,使用元循环评估器可以在 Lisp 本身中编写评估 Lisp 过程的语义。正因为如此,我想将程序的这一部分留在 lisp 中,然而,很明显,在某些时候我需要编写 C 代码,将原语或过程实际应用于 Lisp 数据结构。然而,当我开始编写此代码时,我发现自己编写的逻辑与元循环评估器 itlef 相同,只是 C 版本。
我的问题是我是否需要在 C 中实现eval
and apply
(就像 Peter Norvig 在 Python 中所做的那样),或者是否有某种方法可以引导 lisp 解释器,其中eval
and的唯一实现apply
实际上是用 Lisp 编写的?