大家好,我是對於 Clojure 一無所知的菜鳥小白工程師。
今天要來學習 Clojure 資料型態中的列表 Lists
。
try Clojure here: https://qa-mktg.codingrooms.com/compiler/clojure/
列表(Lists)與向量(Vectors)相似,它們都是包含一系列值的集合。但是它們之間也有些不同。例如,我們無法使用 get
函數來檢索列表中的元素,而是使用 nth
。
我們先來看一個列表的例子,列表的表示方式是將元素放入括號內,並在開頭加上單引號:
'(1 2 3 4)
; => (1 2 3 4)
請注意,當REPL(Read-Eval-Print Loop,一種互動式編程環境)輸出列表時,它不會包括單引號。
如果我們想從列表中檢索元素,可以使用 nth
函數:
(nth '(:a :b :c) 0)
; => :a
(nth '(:a :b :c) 2)
; => :c
值得注意的是,使用 nth
函數從 列表
中檢索元素比使用 get
函數從 向量
中檢索元素慢。這是因為 Clojure 需要遍歷列表的所有 n 個元素才能找到第 n 個元素,而向量可以直接透過 get
索引取得向量的值。
列表的值可以是任何類型,我們可以使用 list
函數來創建列表:
(list 1 "two" {3 4})
; => (1 "two" {3 4})
我們可以使用 conj
函數,將元素添加到列表的開頭:
(conj '(1 2 3) 4)
; => (4 1 2 3)
何時應該使用列表,何時應該使用向量呢?參考書目中提到:「一個好的經驗法則是,如果我們需要輕鬆地將項目添加到序列的開頭,或者如果你正在編寫一個 macro(宏、巨集,程式碼編譯或解釋階段執行程式碼轉換的機制),我們應該使用列表。否則,我們應該使用向量。」
今天我們學習了列表(Lists)的資料結構。它和向量(Vectors)相似,可以放入不同類型的元素,並使用 nth
函數查找對應值。
在下一章節中,我們將學習集合( Sets
)。