リスト
Haskellではリストを以下のように記述する。
[1, 2, 3]
現段階の知識ではこれを変数に代入する方法がわからない。以下のように記述したらエラーが出た。
lst = [1, 2, 3]
で、リストを利用したプログラムとしてcountlineコマンド、標準入力の行数を数えるコマンド。
main = do cs <- getContents print $ length $ lines cs
わけわからん。
getContentsアクションで標準入力を読み取り、それを変数csに束縛する。ここまではOK。
$記号は二項演算子、右辺の式の結果を左辺にある関数の引数として渡す。
こう書くこともできる。
print (length (lines cs))
lines関数は文字列を改行で区切ったリストに変換する。ここでは変数csの内容をリストに変換している。
length関数は引数で受け取ったリストの要素数を取得する。
print関数は引数で受け取った値を文字列として出力する。
putStrLn関数との違いは、putStrLn関数が引数に文字列のみを受け付けるのに対し、print関数は文字列以外の型も受け付ける。
これだけの処理をこんなに簡潔に記述できるとは、Haskellおそるべし。
C#で書くとこうなる。こうやってみるとC#でも簡潔さはそんなに変わらへんか?
public static class Hoge { public static void Main() { Console.WriteLine( Console.In.ReadToEnd().Split('\r').Length ); } }