2011-09-16 28 views
6

我是一名新計劃/球拍學生,請原諒任何明顯的語法錯誤。Scheme:奇怪返回的三個虛線元素列表(如中綴運算符?)

它今天上課想出了這個計劃列表'(a, b, c)應該是無效的,但是當我們運行它,它返回:

>'(a . b . c) 
(b a c) 

這是沒有意義的。 Afaik,口譯員應該用汽車'a和cdr'b創建一個cons cell,'c應該是無效的。也就是說,解釋者在這裏做了一些非常奇怪的事情。這適用於#lang方案,#lang球拍等。我們使用DrRacket作爲解釋器。

有趣的是,

>'(a . b . c . d) 

拋出異常和死亡。

我很好奇,希望能夠理解這一點,因爲我是新手語言。谷歌是非常無益的(可能因爲搜索條件有點模糊)謝謝!

編輯: 這可能是因爲'(a . b . c)被解釋爲b作爲中綴運算符。例如:>(4 . + . 6)返回10.也許解釋器使用b就像操作符一樣?即(b a c),如(+ 4 6),併入。

Expermentation說:

>(define b +) 
>(define a 4) 
>(define c 6) 
>(a . b . c) 
10 

所以我覺得這個問題解決了,但我還是不完全瞭解使用的「」在這種情況下運營商。我想我們已經解決了這個問題,但更多的見解將不勝感激!

+0

操作員兩邊的小圓點讓我想起了Fortran:1.LT。 3 – JasonFruit

回答

8

簡答:你明白了。有關球拍特定使用點的更多信息,請參閱球拍文檔中infix的文檔。

4

這是Racket讀者的特色。 (請參閱John的回答。)

對於其他實現,您可以改爲使用readable S-expressions閱讀器讀取中綴表達式。它使用大括號。例如{3 + 4}被讀入爲(+ 3 4)。更特別的(比Racket的infix閱讀器),你可以使用{3 + 4 + 5}{3 + 4 + 5 + 6};他們將分別讀作(+ 3 4 5)(+ 3 4 5 6)

+1

另請參閱可讀S-exps for Racket的此實現:http://planet.racket-lang.org/display.ss?package=sweet.plt&owner=asumu –