2013-03-18 60 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"|),可能不符合規定。