gpt4 book ai didi

c - 如何使用 metacircular 求值器引导 Lisp 解释器

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

我正在用纯 C 实现 Lisp 解释器,但在从 C 转换到 Lisp 时遇到了问题。

跟随 Peter Norvig 在他的 blog post 中的步骤,我有一个 REPL,它目前将 Lisp 表达式解析为 Lisp 数据结构,并将生成的数据结构序列化回 lisp 表达式,打印如下所示:

我还实现了七个基元 described由 Paul Grahm 撰写,并了解其中的元循环评估器。我的麻烦出现在编写 C 代码部分(不是 lisp!),一旦数据结构被解析(“eval”)部分就实际执行上图所示的部分。

根据我的理解,使用元循环求值器可以在 Lisp 本身中编写求值 Lisp 过程的语义。因此,我想将程序的这一部分保留在 lisp 中,但是,很明显,在某些时候我需要编写实际将原语或过程应用于 Lisp 数据结构的 C 代码。然而,当我开始编写这段代码时,我发现自己编写的逻辑与元循环求值器 itslef 相同,只是 C 版本。

我的问题是我是否需要在 C 中实现 evalapply(就像 Peter Norvig 在 Python 中所做的那样),或者是否有某种方法可以在其中引导 lisp 解释器evalapply 的唯一实现实际上是用 Lisp 编写的?

最佳答案

如果你用 C 编写解释器,则不可能在 lisp 中实现 evalapply。原因是你需要一些方法来解释解释器你会遇到引导问题。

您可以通过数据驱动使其最小化。例如,所有原始语法都有一个标记和一个采用表达式和环境的函数指针。基本上符号 quote 可以评估那个并且你有 eval 调用函数。所有原始函数都有一个标记 + 函数指针,然后 applyeval 将少做很多事情并且更容易扩展。

你是对的,evalapply 感觉就像 C 语言中的一样,因为它就是这样。甚至我的brainfuck project如果你看得足够近,就会泄漏一个元循环求值器。

关于c - 如何使用 metacircular 求值器引导 Lisp 解释器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46088747/

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