大家好,我是對於 Clojure 一無所知的菜鳥小白工程師。
今天我們來複習一下前幾章有關 Clojure 資料結構的內容,如下:
Clojure 中的數字(Numbers),和其他程式語言的表示方式沒有太大差別。
有整數( integers
)、浮點數( floats
),以及比率( ratios
):
93 ;整數
1.2 ;浮點數
1/5 ;比率(用來表達有理數)
Clojure 中的字串(Strings),僅允許使用雙引號來定義。
"Lord Voldemort" ; 有效
'Lord Voldemort' ; 無效
Clojure 的字串不能使用「插值」串接,只允許通過 str
函數進行串聯。
(def name "Chewbacca")
(def new-name (str "\"Uggllglglglglglglglll\" - " name))
(println new-name)
; => "Uggllglglglglglglglll" - Chewbacca
Clojure 中的映射(Maps),類似於其他語言中的字典(dictionaries)或哈希(hashes)。它們是一種將 某個值與其他值關聯起來的方式
。
{:a 0 :b {:c "ho hum"}}
映射可以使用 get
函數查找值:
(get {:a 0 :b {:c "ho hum"}} :b)
; => {:c "ho hum"}
關鍵字(Keywords)是前綴有 :
的資料結構,它們主要用作映射(Maps)中的鍵(keys)。
{:a 1 :b 2 :c 3} ; :a, :b and :c 為關鍵字
Clojure 中的向量(Vectors)類似於陣列(Arrays),基本上上它們是一個 0 索引( 0-indexed
,索引值編排從0 開始)的集合。
[3 2 1]
向量可以使用索引值來查找對應的值:
(get [3 2 1] 2)
; => 1
我們可以使用 conj
函數,將元素添加到向量中:
(conj [1 2 3] 4)
; => [1 2 3 4]
列表(Lists)與向量(Vectors)相似,它們都是包含一系列值的集合。
列表的表示方式是將元素放入括號內,並在開頭加上單引號:
'(1 2 3 4)
; => (1 2 3 4)
請注意,當REPL 輸出列表時,它不會包括單引號。
向量可以使用 nth
函數來查找對應的值:
(nth '(:a :b :c) 2)
; => :c
要注意,使用 nth
函數從 列表
中檢索元素比使用 get
函數從 向量
中檢索元素慢。
我們可以使用 conj
函數,將元素添加到列表的開頭:
(conj '(1 2 3) 4)
; => (4 1 2 3)
集合(Sets)是一組唯一值的集合。
#{"kurt vonnegut" 20 :icicle}
向量也可以使用 set
函數從現有的向量和列表中創建集合
(set '(3 3 3 4 4))
(set [3 3 3 4 4])
; => #{3 4}
今天我們針對數字(Numbers)、字串(Strings)、映射(Maps)、關鍵字(Keywords)、向量(Vectors)、列表(Lists)等資料結構進行了複習。
在下一章節,我們將要開始學習 Function
函式。
今天才發現這麽棒的系列~~而且已經第17天了!! Yvonne加油順利完賽!
居然被發現了!
感謝大大的鼓勵🙇♀️🙇♀️🙇♀️