跳轉到內容

Scheme 程式設計/Scheme 資料型別

來自華夏公益教科書,開放的書籍,為開放的世界
Scheme 程式設計
 ← Scheme 簡介 Scheme 資料型別 簡單表示式 → 

Scheme 有幾種資料型別,有原子型別和複合型別,兩者之間最顯著的區別是原子型別是唯一不可變的,而複合型別是可變的,這意味著我們可以修改它們。 這也意味著,例如,可以有兩個不同的字串

"Hello, World!"

即使它們具有相同的字元,而每個字元

#\H

是同一個物件。

原子型別

[編輯 | 編輯原始碼]

布林值

[編輯 | 編輯原始碼]

布林值是

#t

(true) 或

#f

(false)。布林值是自評估的。

數字是自評估的,並按預期輸入。 Scheme 還支援複數,例如

0+4i

。只需鍵入

4i

在 Scheme 中被解釋為一個符號,注意。

字元是自評估的,並按如下方式輸入

#\a

.

符號是字元序列,不同於字串,因為它們不是自評估的,並且它們也不能包含空格。 它們只是透過實際鍵入輸入,例如

(add one two)

是 Scheme 中包含三個符號的列表。

複合型別

[編輯 | 編輯原始碼]

對和列表

[編輯 | 編輯原始碼]

對和列表是 Scheme 中最重要的複合型別。 我們已經說過 Scheme 原始碼本身是由列表組成的,因此列表顯然不是自評估的。 鍵入一個不能合理評估的列表(例如以數字開頭的列表)將產生錯誤。

但是,有一個列表是原子的;它被稱為空列表,或nilnull,取決於你與誰交談。 它只是一個根本沒有元素的列表。 它在原始碼中表示為

()

。所有其他列表實際上都是偽裝的對,a 和 b 的一對寫成

(a . b)

,這與 a 和 b 的列表不同。 對也不是自評估的,並且通常會產生錯誤。 列表是什麼,只是一個對,它的第一個元素(也稱為它的car)是列表的第一個元素,它的第二個元素(也稱為它的cdr)是一個列表包含所有其他元素。 因此列表

(print "Hello, World!")

只是

(print . ("Hello, World!" . ()))

的簡寫

向量

[編輯 | 編輯原始碼]

列表的問題是,如果列表非常大,list-ref 和 list-set! 是緩慢的操作。 為了使資料結構允許快速讀取和寫入,Scheme 提供了向量。

#(100 90 80 70)

這是一個數字向量的示例

字串

[編輯 | 編輯原始碼]

"This is a string."
字串是字元序列。 它們包含在雙引號中。
華夏公益教科書