リスト
Linked List
リテラル
code:Elm
list1 : List Int
list1 = 1, 2, 3, 4
list2 : List Int
list2 =
[ 1
, 2
, 3
, 4
]
末尾カンマは禁止。行頭カンマ方式(差分が出にくいって理由)
elm-formatかければ勝手にこうなるので、書きづらさがないですmoyamin.icon
比較
code:Elm
list1 == list2 -- == True
そのまま比較できる
先頭に追加
code:Elm
1,2,3,4 == 1 :: 2,3,4 -- == True
::演算子で先頭に要素を追加
::は右結合。つまりこう
code:Elm
1,2,3,4
== 1 :: 2 :: 3 :: 4 :: []
== (1 :: (2 :: (3 :: (4 :: []))))
== (1 :: (2 :: (3 :: 4 )))
== (1 :: (2 :: 3, 4 ))
== (1 :: 2, 3, 4 )
== 1, 2, 3, 4
パターンマッチ
上の感じではがせる
code:Elm
case 1,2,3,4 of
x :: y :: z :: w :: [] ->
...
x :: y :: z :: rest ->
...
x :: xs ->
...
[] ->
...
要素を何個でも一気にはがせるけどあんまりやんない
下の二つのブランチで、要素を一個ずつ処理、要素がなくなったときの処理になる
appendable
code:Elm
list3 : List Int
list3 =
list1 ++ list2 // == 1,2,3,4,1,2,3,4
++で結合できる
comparable
中の型がcomparableならcomparableだったはず
性能
リンクドリストなので前からたどるのはいいけどランダムアクセスには向いてない
関連package
elm-lang/core List
基本
elm-community/list-extra List.Extra
communityのExtra系の一つ
大概見つかると思う
mgold/elm-nonempty-list List.Nonempty
必ず要素が一つあるリスト
#core