2012-02-12 31 views
0

R5RS 6.3.3說爲什麼(EQ「高,bitBlt(與字符串>符號 「高,bitBlt」)?) - > #F

(eq? 'bitBlt (string->symbol "bitBlt")) ==> #f 

這是否意味着

(eq? 'bitBlt (string->symbol (symbol->string 'bitBlt))) ==> #f? 

麋鹿返回#牛逼!

R5RS還說

(string->symbol "mISSISSIppi") ==> the symbol with name "mISSISSIppi" 

(推測這意味着「密西西比州)

(symbol->string 'Martin) ==> "martin" 

含義符號 - >字符串返回標準情況下的串(小寫在這個例子中)。

所以,如果我擴大我的第二個例子

(symbol->string 'bitBlt) ==> "bitblt" 
(string->symbol (symbol->string 'bitBlt)) ==> 'bitblt 

,因此

(eq? 'bitBlt (string->symbol (symbol->string 'bitBlt))) ==> #t 

,因爲符號的情況下從R5RS不敏感

(eq? 'mISSISSIppi 'mississippi) ==> #t 

所以,如果我擴大我原來的問題

(string->symbol "bitBlt") ==> 'bitblt 

,因此

(eq? 'bitBlt (string->symbol "bitBlt")) ==> #t 

,對嗎?但R5Rs說#f!

我在哪裏錯了?

爲什麼要指定此行爲?

編號:

http://people.csail.mit.edu/jaffer/r5rs_8.html#SEC49

http://bugs.call-cc.org/browser/numbers/r4rstest.scm?rev=1線468

實際會話例如:

3> (display 'bitBlt) 
bitblt 
3> (display (string->symbol "bitBlt")) 
bitBlt 
3> (eq? 'bitBlt (string->symbol "bitBlt")) 
#f 
3> (eq? 'bitblt (string->symbol "bitBlt")) 
#f 
3> (eq? 'bitblt (string->symbol "bitblt")) 
#t 
3> (eq? 'bitBlt (string->symbol (symbol->string 'bitBlt))) 
#t 
3> (eq? 'mISSISSIppi 'mississippi) 
#t 

回答

1

example你報價「假設[S]的執行標準情況下是小寫」。這意味着表達式'bitBlt實際上擴展爲符號bitblt。符號實際上並不區分大小寫; read可能正常化情況。

string->symbol的語義不同於的read不同,並且該過程可以返回一個大小寫混合符號:

此過程可以創建與包含在非標準情況下特殊字符或字母名稱的符號,但創建這樣的符號通常是一個糟糕的主意,因爲在Scheme的某些實現中,它們不能被視爲自己。

在您的實施中,string->symbol似乎也正常化大小寫。檢查輸出

(display 'bitBlt) 
(display (string->symbol "bitBlt")) 

可以肯定。

(我以前的答案是錯的。)

+0

我添加的會話輸出質疑。謝謝。我不確定這是一個案例問題。如果這是一個案例問題,當然表達式3或4應該是真的?既然它在R4RStest.scm中,我懷疑是更深層的東西,但是我看不到。 Like(guessing)string-> symbol必須產生一個唯一的符號,不能重新使用現有符號的存儲。我關心的並不是'麋鹿' - 它可能是錯誤的 - 我試圖理解R5RS,以及我想,這個R4RStest.scm文件。在我看來,這種古怪會殘留像我這樣的傻子,他們可能從來沒有弄清楚哪裏出了問題。 – philcolbourn 2012-02-12 14:28:14

+0

@philcolbourn:這很明顯,你的'read'規範化了case,而'string-> symbol'沒有。由於初始輸入被歸一化爲'(字符串 - >符號(符號 - >字符串'bitBlt))'的結果應該打印爲'bitblt'。 – 2012-02-12 15:53:28

+0

這是我的第一個想法,但爲什麼然後是(eq?'bitblt(string-> symbol「bitBlt」))==> #f? (來自會話輸出的第四個結果),爲什麼它關心符號的情況下(eq?'mISSISSIppi'mississippi)==> #t? (第7個結果) – philcolbourn 2012-02-13 04:17:45

相關問題