iT邦幫忙

2023 iThome 鐵人賽

DAY 15
0
自我挑戰組

從零開始的 clojure系列 第 15

Day 15 Clojure- Data Structures - Lists

  • 分享至 

  • xImage
  •  

前言

大家好,我是對於 Clojure 一無所知的菜鳥小白工程師。

今天要來學習 Clojure 資料型態中的列表 Lists

try Clojure here: https://qa-mktg.codingrooms.com/compiler/clojure/

Lists

列表(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)。

參考文章


上一篇
Day 14 Clojure- Data Structures - Vectors
下一篇
Day 16 Clojure- Data Structures - Sets
系列文
從零開始的 clojure23
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言