在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) ])
感谢帮助过我的人!
我正在用 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) ])
感谢帮助过我的人!