在方案中的方案解释器中,如何实现“引用”?

时间:2018-06-09 09:52:27

标签: scheme racket interpreter quote

我正在计划中编写一个方案解释器(好吧,Racket)。在我的解析/评估函数中,我有以下规则:

(quotation [(Q datum) (string->symbol $2)])

string->symbol显然在这样的翻译中对quote的定义不正确。

我尝试了许多其他方法,但都没有奏效。当然,如果我尝试使用Racket quote函数它不起作用,因为$2按字面解释,所以一切都评估为$2

现在,如果我在REPL评估一些例子:

$> (eval '1)
$> 1
$> (eval '#f)
$> #f
$> (eval 's)
$> s

VS。球拍REPL:

$> (eval '1)
$> 1
$> (eval '#f)
$> #f
$> (eval 's)
$> 's

注意区别:(eval's) - >在我的, - >在Racket中。此外,执行(symbol? (eval x))的行为也不同。

在这种情况下我应该如何实施quote

1 个答案:

答案 0 :(得分:0)

正如评论中所述,这是REPL打印的问题,正确的实现是:

(quotation [(Q datum) $2])

感谢那些帮助我的人!