首页 > 解决方案 > 球拍、“#lang peg”和“case”

问题描述

我正在尝试生成一个生成球拍“案例”的“#lang peg”规则。

我来自 Common Lisp,我试图通过将一些列表粘合在一起,然后对它们进行 eval 来在宏中创建一个 lambda 表达式。我得到:

"e=(lambda (w k) (println (quote hello)))"
"(syntax? e)->#f, (pair? e)->#t"
lambda: unbound identifier;
 also, no #%app syntax transformer is bound in: lambda

(当我尝试(eval e)时出现上述错误)。

(调试用(格式“~a”)打印)。

[我我想用生成的 (case) 替换上面的 (println (quote hello)),然后评估整个 shebang]。

我孤立的“#lang peg”测试似乎可以工作,但较大的“#lang peg”代码块如上所述失败。

我不知道如何调试这个。

“宏步进器”仍然灰显。(要么它在 Racket 8.2 中被破坏,要么我不知道如何使用它)。

我猜上面的“lambda”是在其他范围内创建的,但不是在我的测试中。

如何检查“lambda”符号?

我的测试中的“lambda”与较大代码中的“lambda”有所不同。

我愿意相信这是一个不好的方法。将不胜感激有关更好方法的提示。

是否有从“#lang peg”规则生成“案例”的示例?

标签: lambdamacrosracketpeg

解决方案


推荐阅读