Scheme 程式設計/Scheme 資料型別
外觀
Scheme 有幾種資料型別,有原子型別和複合型別,兩者之間最顯著的區別是原子型別是唯一且不可變的,而複合型別是可變的,這意味著我們可以修改它們。 這也意味著,例如,可以有兩個不同的字串
"Hello, World!"
即使它們具有相同的字元,而每個字元
#\H
是同一個物件。
布林值是
#t
(true) 或
#f
(false)。布林值是自評估的。
數字是自評估的,並按預期輸入。 Scheme 還支援複數,例如
0+4i
。只需鍵入
4i
在 Scheme 中被解釋為一個符號,注意。
字元是自評估的,並按如下方式輸入
#\a
.
符號是字元序列,不同於字串,因為它們不是自評估的,並且它們也不能包含空格。 它們只是透過實際鍵入輸入,例如
(add one two)
是 Scheme 中包含三個符號的列表。
對和列表是 Scheme 中最重要的複合型別。 我們已經說過 Scheme 原始碼本身是由列表組成的,因此列表顯然不是自評估的。 鍵入一個不能合理評估的列表(例如以數字開頭的列表)將產生錯誤。
但是,有一個列表是原子的;它被稱為空列表,或nil 或null,取決於你與誰交談。 它只是一個根本沒有元素的列表。 它在原始碼中表示為
()
。所有其他列表實際上都是偽裝的對,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."