2012-05-19 21 views
1

我很難理解Scheme中的符號。下面讓我困惑:瞭解計劃中的符號

1 ]=> (symbol? 'x) 
; Value: #t  
1 ]=> (symbol? '('x)) 
; Value: #f 

我想我明白了爲什麼第一個是一個符號,但後來爲什麼不'('x))?有人可以解釋爲什麼嗎?

爲了什麼是值得的,我正在運行MIT/GNU計劃。

回答

4

在方案'...(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)

1

'('x)是一個列表,而不是一個符號。 Scheme中的符號是字母數字的,如變量和關鍵字。所以'a是一個符號,因此'supercalafragalistic,但'(1 2 3)是一個數字列表。

我不確定到底是什麼讓你失望,但它可能是''可以用來製作符號,也可以用來製作列表和其他東西。並非所有以'開頭的符號都是。

+1

嗯,他們真的不需要字母數字。 Scheme有非常自由的命名約定。例如''* foo *'和''foo'一樣是一個有效的符號。 – oobivat

+0

@oobivat,我意識到這一點。 –

+0

是的,在這種情況下,這似乎是個好主意。 – oobivat