我試圖運行drracket此命令:定義在方案
(define #t #f)
,我得到以下錯誤messege:
define: bad syntax in: #t
我想知道什麼是該錯誤的原因,爲什麼我可以這樣做:(define + 12)
而不是這個。
非常感謝!
我試圖運行drracket此命令:定義在方案
(define #t #f)
,我得到以下錯誤messege:
define: bad syntax in: #t
我想知道什麼是該錯誤的原因,爲什麼我可以這樣做:(define + 12)
而不是這個。
非常感謝!
對define
的第一個參數必須是符號。 +
是一個符號。 foo
是一個符號。 #t
是#t,而不是符號。 1
不是一個符號。
s /符號/標識符/ g –
@ ChrisJester-Young方案在規範中有字'符號',所以我堅持認爲 – keltar
請參見:[定義的語法](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)'的外部形式是一個列表,但是在運行代碼時,顯然它不會評估爲列表。 –
define
需要一個標識符作爲第一個參數。在這種情況下,您提供#t
,其計算結果爲布爾值true。因此bad syntax
錯誤消息。
正如我對keltar的評論中所提到的,請不要將符號與標識符混淆。 'define'需要一個標識符,而不是一個符號。例如,你不能爲此定義'(define(string-> symbol「foo」)'bar)',甚至是'(define'foo'bar)'。 –
@ ChrisJester-Young - 好點,我更新了我的答案。這就是說,'(定義'foo'吧)'實際上在我測試的所有方案中都有評估:雞,bigloo,赤壁,稻殼。但這只是一個技術性問題,因爲它擴展爲包含標識符「quote」的表達式。 –
(define <variable> <expression>)
A variable is a special kind of identifier,和the format of identifiers is described here。從描述中可以看出,#t
(更一般地說,任何以#
開頭的內容)都不是標識符。
這可能是一個愚蠢的問題,但_爲什麼你想要做這個_? D-: –