方案 - 双重报价是否可以划分数字?

时间:2013-03-18 09:05:39

标签: parsing lisp scheme implementation interpreter

我目前正在实施一个基于网络的计划环境,用于踢腿和傻笑。在实现解析器时,我偶然发现了一个奇怪的问题:一些Scheme实现声明读取数字的数字直到满足分隔符,但它们也声称双引号是有效的分隔符。成功评估123"abc"对我来说似乎很奇怪,但是Racket似乎这样做,依次显示123"abc"

很困惑,我启动了Gimp并进入了它的Script-Fu控制台,这是Guile Scheme。给它相同的表达,它抱怨一个无约束的价值;所以它试图将其解析为符号?

我尝试了JScheme作为'第三意见'。它还抱怨未定义的变量。

TL; DR: Scheme的行为应该是什么?

旁注:鉴于后两者的抱怨,我尝试了以下方法:

(define 123"abc" 10)
123"abc"

评估为10。我糊涂了。双引号标记不应该导致解析器挽救而不是分配符号吗?

1 个答案:

答案 0 :(得分:1)

在您选择的Scheme实现上尝试此操作(您可能需要在字符串端口工作之前加载SRFI 6):

(call-with-input-string "(123\"abc\")" read)

在Racket和Guile上,它都以(123 "abc")的形式读入,这与我的期望完全一样。通过快速浏览R5RS的“词法结构”部分,我相信返回不同内容的实现,如(|123"abc"|),可能不符合。