我很難理解Scheme中的符號。下面讓我困惑:瞭解計劃中的符號
1 ]=> (symbol? 'x)
; Value: #t
1 ]=> (symbol? '('x))
; Value: #f
我想我明白了爲什麼第一個是一個符號,但後來爲什麼不'('x))
?有人可以解釋爲什麼嗎?
爲了什麼是值得的,我正在運行MIT/GNU計劃。
我很難理解Scheme中的符號。下面讓我困惑:瞭解計劃中的符號
1 ]=> (symbol? 'x)
; Value: #t
1 ]=> (symbol? '('x))
; Value: #f
我想我明白了爲什麼第一個是一個符號,但後來爲什麼不'('x))
?有人可以解釋爲什麼嗎?
爲了什麼是值得的,我正在運行MIT/GNU計劃。
在方案'...
是(quote ...)
的簡寫。因此'x
是(quote x)
的簡寫。 和'(1 2 3)
是簡寫(quote (1 2 3))
。
當計算表達式時,引用的值不會作爲表達式求值,而只是返回。
在(quote x)
引用的是符號x
。因此(quote x)
評估爲符號x
。
在(quote (1 2 3))
引用的值是一個列表。它評估爲(1 2 3)
。
在你稍微複雜的例子,你有
'('x)
這是(quote ((quote x)))
簡寫。
評估對象列表((quote x))
。在大多數方案中, 打印爲('x)
。
'('x)
是一個列表,而不是一個符號。 Scheme中的符號是字母數字的,如變量和關鍵字。所以'a
是一個符號,因此'supercalafragalistic
,但'(1 2 3)
是一個數字列表。
我不確定到底是什麼讓你失望,但它可能是'
。 '
可以用來製作符號,也可以用來製作列表和其他東西。並非所有以'
開頭的符號都是。
嗯,他們真的不需要字母數字。 Scheme有非常自由的命名約定。例如''* foo *'和''foo'一樣是一個有效的符號。 – oobivat
@oobivat,我意識到這一點。 –
是的,在這種情況下,這似乎是個好主意。 – oobivat