2013-03-18 58 views
2

我目前正在实施一个基于网络的计划环境的踢和咯咯。在实现解析器的同时,我偶然发现了一些奇怪的现象:一些Scheme实现声明一个数字的位数被读取,直到符合分隔符为止,但他们还声称双引号是有效的分隔符。成功评估123"abc"对我来说似乎很奇怪,但是Racket似乎这样做,依次显示123和​​。计划 - 双引号可以分号吗?

困惑,我启动了GIMP并进入了它的Script-Fu控制台,这是Guile Scheme的底层。给它同样的表达,它抱怨一个不受约束的价值;所以它试图把它解析为一个符号?

我试过JScheme作为'第三意见'。它也抱怨一个未定义的变量。

TL; DR: Scheme应该在这里做什么?

侧面说明:考虑到后两者的投诉,我试过如下:

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

它评为10。我很困惑。双引号标记不应该导致解析器跳出而不是分配符号吗?

+1

作为参考,在R5RS或R6RS中描述了Scheme的语法。我期望123“abc”被解析成一个数字和一个字符串。但最好咨询各自的实施维护人员。他们最好回答。这个问题很有趣,但很可能你会在那里得到答案。 – 2013-03-18 09:19:14

回答

1

试试这个你选择的方案执行(你可能需要在SRFI 6加载之前串端口将工作):

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

在这两个球拍和狡诈,这种读取为(123 "abc"),而这正是我期望。从快速浏览R5RS的“词法结构”部分,我相信实现返回不同的东西,如(|123"abc"|),可能不符合规定。