リスト入門

Lisp然り、Haskellでもリストが重要です。

リストとは、複数の要素が並んでいるという点では、Cなどの配列に似ていますが、ランダムアクセス(添字で要素にアクセス)ができない、要素数が動的(決まっていない)など、違う点もあります。配列というよりは、連結リストに近いです。というより、連結リストだと思ってください。

作り方は、

[ a , b , c ]

簡単ですね。他には、

a:b:c:[]

これでも、上と同じリストができあがります。「:」は、何かとリストをくっつけてリストにする演算子です。他にも、作り方が存在します。

リストは、簡単に先頭とその他にわけれます。例えば、

hoge (x:xs) = x

という関数hogeを定義したとき、(x:xs)というのは、このリストを表します。何故かというと「:」が、何かとリストをくっつけてリストにする演算しなので、(x:xs)というのは、先頭がxで、残りがxsというリストを表すことになります。なので、このxを返すhoge関数は、引数に渡されたリストの先頭を返す関数となるわけです。xのかわりにxsを返すようにすれば、先頭を除いたリストを返す関数となるわけですね。これらの関数は、もともとHaskellでそれぞれ、headとtailという関数として定義されています。Lispのcarとcdrですね。

リストは、かなり重要です。他にもいろいろありますが、それはまた別のお話。