在scheme中的scheme interpreter中,如何实现'quote'?

In a scheme interpreter in scheme, how to implement 'quote'?

我正在用 scheme(好吧,Racket)编写一个 scheme 解释器。在我的 parse/eval 函数中,我有以下规则:

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

string->symbol 在这样的解释器中显然是 quote 的错误定义。

我尝试了很多其他方法,但 none 方法奏效了。当然,如果我尝试使用 Racket quote 函数它不起作用,因为 </code> 是按字面解释的,所以一切都计算为 <code>.

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

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

VS.球拍 REPL:

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

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

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

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

(quotation [(Q datum) ])

感谢帮助过我的人!