### 列表
Lists是一個有序的元素的集合 — 相當于java里面的LinkedList。這種集合對于那種一直要往最前面加一個元素,干掉最前面一個元素是非常高效的(O(1)) — 想到于java里面的堆棧, 但是沒有高效的方法來獲取第N個元素, 也沒有高效的辦法來修改第N個元素。
下面是創建同樣的list的多種不同的方法:
```
(def stooges (list "Moe" "Larry" "Curly"))
(def stooges (quote ("Moe" "Larry" "Curly")))
(def stooges '("Moe" "Larry" "Curly"))
```
`some` 可以用來檢測一個集合是否含有某個元素. 它的參數包括一個謂詞函數以及一個集合。你可以能會想了,為了要看一個list到底有沒有某個元素為什么要指定一個謂詞函數呢?其實我們是故意這么做來讓你盡量不要這么用的。從一個list里面搜索一個元素是線性的操作(不高效),而要從一個set里面搜索一個元素就容易也高效多了,看下面的例子對比:
```
(some #(= % "Moe") stooges) ; -> true
(some #(= % "Mark") stooges) ; -> nil
; Another approach is to create a set from the list
; and then use the contains? function on the set as follows.
(contains? (set stooges) "Moe") ; -> true
```
`conj` 和 `cons` 函數的作用都是通過一個已有的集合來創建一個新的包含更多元素的集合 — 新加的元素在最前面。 `remove` 函數創建一個只包含所指定的謂詞函數測試結果為false的元素的集合:
```
(def more-stooges (conj stooges "Shemp")) -> ("Shemp" "Moe" "Larry" "Curly")
(def less-stooges (remove #(= % "Curly") more-stooges)) ; -> ("Shemp" "Moe" "Larry")
```
`into` 函數把兩個list里面的元素合并成一個新的大list
```
(def kids-of-mike '("Greg" "Peter" "Bobby"))
(def kids-of-carol '("Marcia" "Jan" "Cindy"))
(def brady-bunch (into kids-of-mike kids-of-carol))
(println brady-bunch) ; -> (Cindy Jan Marcia Greg Peter Bobby)
```
`peek` 和 `pop` 可以用來把list當作一個堆棧來操作. 她們操作的都是list的第一個元素。