2014-03-13 51 views
2

我試圖運行drracket此命令:定義在方案

(define #t #f) 

,我得到以下錯誤messege:

define: bad syntax in: #t 

我想知道什麼是該錯誤的原因,爲什麼我可以這樣做:(define + 12)而不是這個。

非常感謝!

+0

這可能是一個愚蠢的問題,但_爲什麼你想要做這個_? D-: –

回答

-2

define的第一個參數必須是符號。 +是一個符號。 foo是一個符號。 #t是#t,而不是符號。 1不是一個符號。

+1

s /符號/標識符/ g –

+0

@ ChrisJester-Young方案在規範中有字'符號',所以我堅持認爲 – keltar

+0

請參見:[定義的語法](http://www.schemers.org /Documents/Standards/R5RS/HTML/r5rs-ZH-8.html#%_sec_5.2)和[變量是什麼](http://www.schemers.org/Documents/Standards/R5RS/HTML/r5rs- ZH-6.html#%_ sec_3.1)。標識符的外部形式確實是一個符號,但在實際的代碼中,標識符和符號是非常不同的東西。以同樣的方式,表達式'(+ 3 4)'的外部形式是一個列表,但是在運行代碼時,顯然它不會評估爲列表。 –

0

define需要一個標識符作爲第一個參數。在這種情況下,您提供#t,其計算結果爲布爾值true。因此bad syntax錯誤消息。

+0

正如我對keltar的評論中所提到的,請不要將符號與標識符混淆。 'define'需要一個標識符,而不是一個符號。例如,你不能爲此定義'(define(string-> symbol「foo」)'bar)',甚至是'(define'foo'bar)'。 –

+1

@ ChrisJester-Young - 好點,我更新了我的答案。這就是說,'(定義'foo'吧)'實際上在我測試的所有方案中都有評估:雞,bigloo,赤壁,稻殼。但這只是一個技術性問題,因爲它擴展爲包含標識符「quote」的表達式。 –

4

syntax of define是:

(define <variable> <expression>) 

A variable is a special kind of identifier,和the format of identifiers is described here。從描述中可以看出,#t(更一般地說,任何以#開頭的內容)都不是標識符。

+0

它實際上是'(定義)'正式在R7RS規範。 – GoZoner

+2

@GoZoner請參閱R7RS中的第5.3節(第25頁)。它仍然使用''。 (我確實認爲它實際上歸結爲'',並且第7.1.6節(第64頁)也是這樣說的。) –

+1

不錯。在句法上它是一個'';在語義上它是一個''(標識符綁定到一個位置,非語法)。謝謝。 – GoZoner