TL;DR
- Clojure のリストは
'( … )かlistで定義する。Clojure のプログラムはすべてリストで構成されている。 - ベクタと同じく
count、first、rest、nth、cons、conjが使えるが、関数として呼び出すことはできず、要素はどちらの方法でも先頭に追加される。
内容
ベクタと似ているが、ベクタは [ ] で囲むのに対して、リストは ( ) で囲む。Clojure のプログラムはすべてリストで構成されている。
定義
リストを定義するには、'( … ) を使う。
'(1 2 3 4) ;; (1 2 3 4)もし ' がないと、Clojure は 1 を関数、2 3 4 を引数と捉えるので、エラーになる。
(1 2 3 4)
;; Execution error (ClassCastException)list を使って定義することもできる。
(list 1 2 3) ;; (1 2 3)要素の取得
ベクタと同じく、count、first、rest、nth がそれぞれ使える。
(def friends-list
'("Ram", "Bashir", "Antony", "Buddha"))
(count friends-list) ;; 4
(first friends-list) ;; "Ram"
(rest friends-list) ;; ("Bashir" "Antony" "Buddha")
(nth friends-list 3) ;; "Buddha"ただし、ベクタのようにリストを関数として扱い、インデックス番号を渡すことはできない。
(friends-list 3)要素の追加
要素を追加する cons と conj も使える。リストは内部的には単純な連結リストなので、どちらも新しい要素が先頭に付く。
(cons "Pariyaar" friends-list)
;; ("Pariyaar" "Ram" "Bashir" "Antony" "Buddha")
(conj friends-list "Pariyaar")
;; ("Pariyaar" "Ram" "Bashir" "Antony" "Buddha")どちらの操作もイミュータブルなので、元のリストは影響を受けない。
friends-list ;; ("Ram" "Bashir" "Antony" "Buddha")