我正在计划中编写一个方案解释器(好吧,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
?
答案 0 :(得分:0)
正如评论中所述,这是REPL打印的问题,正确的实现是:
(quotation [(Q datum) $2])
感谢那些帮助我的人!