ElmのListは、同じ型の値が0個以上集まった、不変のコレクションです。
配列は、次のように定義できます。
empty = []
singleValue = [ 5 ]
threeValues = [ "a", "b", "c" ]
配列に要素を追加する最も一般的な方法は、::(cons)演算子を使うことです。
twoToFour = [ 2, 3, 4 ]
oneToFour = 1 :: twoToFour --> [ 1, 2, 3, 4 ]
配列は、Listモジュールで定義された関数や演算子、またはパターンマッチングを使って操作します。
describe : List String -> String
describe list =
case list of
[] ->
"Empty list"
[ "hello" ] ->
"Singleton list with: hello"
x :: xs ->
"Non-empty list with head: " ++ x
describe [] --> "Empty list"
describe [ "hello" ] --> "Singleton list with: hello"
describe [ "hello", "world" ] --> "Non-empty list with head: hello"
この演習では、Exercismで学びたいプログラミング言語の配列を管理するコードを書きます。 タスクは6つあり、いずれも配列を扱います。
学びたい言語を管理するには、新しい配列を作成する必要があります。
空の新しい配列を格納するnewList定数を定義します。
newList
--> []
今、学びたい言語を書き出した紙が1枚あります。Elm、Clojure、Haskellです。
この配列を表すexistingList定数を定義します。
existingList
--> [ "Elm", "Clojure", "Haskell" ]
Exercismを見て回って、もっと面白い言語を見つけたら、自分の配列に追加したくなります。
配列の先頭に新しい言語を追加するaddLanguage関数を実装します。
addLanguage "TypeScript" [ "JavaScript", "CoffeeScript" ]
--> [ "TypeScript", "JavaScript", "CoffeeScript" ]
言語を手作業で数えるのは面倒です。
配列にある言語の数を数えるcountLanguages関数を実装します。
countLanguages [ "C#", "Racket", "Rust", "Ruby" ]
--> 4
しばらくして、自分の配列が実は逆順になっていることに気づきます!
配列を逆にするreverseList関数を実装します。
reverseList [ "Prolog", "C", "Idris", "Assembly" ]
--> [ "Assembly", "Idris", "C", "Prolog" ]
どの言語も好きですが、Elmは心の中でも特別な存在です。 そのため、次のような言語の配列には、とてもワクワクします。
言語の配列がワクワクするものかどうかを確かめるexcitingList関数を実装します。
excitingList [ "Nim", "Elm" ]
--> True