问题标签 [metacircular]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
97 浏览

scheme - 为什么我可以定义一个新的条件,并且Scheme 不会在条件条件下与我的新条件混淆?

我有这个任务,我正在使用元循环评估器,我定义了一个cond这样的新任务:

以及else

我的问题是为什么这(下)实际上有效?

Scheme 怎么知道cond我定义的 cond 和 my else,而不是条件condand else

(请随意编辑标题,因为我不确定如何提出我的问题)

0 投票
1 回答
665 浏览

c - 如何使用元循环评估器引导 Lisp 解释器

我正在用纯 C 实现一个 Lisp 解释器,并且在从 C 转换到 Lisp 时遇到了麻烦。

按照 Peter Norvig 在他的博客文章中的步骤,我有一个 REPL,它到目前为止将 Lisp 表达式解析为 Lisp 数据结构,并将生成的数据结构序列化回一个 lisp 表达式,如下所示:

我也实现了Paul Grahm描述的七个原语,并且理解了其中的元循环求值器。我的麻烦在于编写 C 代码的一部分(不是lisp!),一旦它被解析(“eval”)部分,它就会在上面显示的图像中实际执行数据结构。

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

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

0 投票
1 回答
461 浏览

functional-programming - 元循环评估器概念

我试图理解元循环评估器的概念。根据维基百科

在计算中,元循环评估器或元循环解释器是一种解释器,它使用解释器宿主语言的类似设施来定义解释语言的每个特征。例如,解释 lambda 应用程序可以使用函数应用程序来实现。

在 Lisp 的上下文中,我认为这意味着解释器实现将程序状态存储在与语法本身所表达的数据结构相似的数据结构中,即列表。

更一般地说,我会说解释器实现使用语法的范式来解释语法。此外,它与以解释语言实现的解释器无关(Lisp 解释器通常用 C 编写)。只有范式对等很重要。

让我们考虑一下 Java Maxine 虚拟机,即元循环 JVM。Maxine JVM 是用 Java 编写的。它是在 JVM 中运行的 JVM。同样,解释器使用与解释语言相同的范式。Java对象表达的可执行代码由Java对象表达的可执行代码管理。当然,实际的可执行文件是字节码,但它之外的抽象概念才是最重要的。因此,我相信 Maxine 可能是用任何语言编写的,并且仍然被视为元循环,只要实现符合 OOP 概念和 Java 规则。最明显的这种语言是 Java 本身。然而,这是我在上一段中描述的一个有趣的冲突,它真的让我头疼!

这就是我在理论上理解元循环评估器的含义的方式。但我并没有真正了解实际方面。根据维基百科

与现有的语言实现相结合,元循环解释器提供了一个基线系统,可以从中扩展语言,向上通过添加更多特性或向下编译特性而不是解释它们

这实际上意味着什么?例如,这是如何使用 Maxine 虚拟机实现或可能付诸实践的?这与诸如 的函数有何不同eval

如果我们更哲学一点,元循环解释器有两个前提

  • 解释器实现语言无关紧要,范式等价才是
  • 在执行层面,范式的概念不复存在,一切都只是字节

元循环的明确边界是什么?这个特性究竟体现在哪里?我可能想多了,但我觉得这是一个有趣的话题。

0 投票
3 回答
291 浏览

scheme - 在元循环评估器中添加基元

我正在研究元循环评估器,并且正在尝试添加原始程序。我差不多完成了,除了我不确定如何添加错误。这是我到目前为止所拥有的:

到目前为止,这有效。我尝试添加(list '(error) (error "Metacircular Interpreter Aborted"))错误,但它显然不起作用......我该怎么做?

谢谢!

0 投票
3 回答
184 浏览

javascript - 如何实现一个元循环评估器来解析 JavaScript 中的“[1..10]”?

我想在 JS 中实现一个元循环评估器,支持函数式编程。

我该如何解析这个?

[1..10]

我想收到 1 和 10

0 投票
0 回答
61 浏览

sicp - 是否有实现 call-with-current-continuation 的 SICP 元循环评估器

可以在https://mitpress.mit.edu/sites/default/files/sicp/code/ch4-mceval.scm找到 SICP 元循环评估器的来源

有谁知道 mceval 包括一个 call-with-current-continuation 的实现?