Pseudo Engineer

ソフトウェアの話とか書いてくよ

Haskell道 その2

すごいHaskellたのしく学ぼう!

すごいHaskellたのしく学ぼう!

Amazonで注文してたのが届いたので早速読んでます。

リスト操作

結合
[1, 2, 3] ++ [4, 5, 6]
 -> [1, 2, 3, 4, 5, 6]

リスト結合時は左側のリストの末端まで走査することになるため、左側に大きなリストを置かない方がいいと書いてるけど、実際は遅延評価なので気にならないっぽい。

*Main> let n = [1..99999999] ++ [1]  -- 一瞬
*Main> let t = tail n                -- 一瞬
*Main> length t                      -- 時間がかかる
99999999

先頭に要素を追加する。

let str = "ello, world"
'h':str
 -> "hello, world"
"h":str
 -> error  -- "h"は要素ではないため
アクセス

!! のあとに添え字を置く。

[1, 2, 3, 4, 5, 6] !! 2
 -> 3
操作
head [1, 2, 3, 4, 5, 6]
 -> 1
tail [1, 2, 3, 4, 5, 6]
 -> [2, 3, 4, 5, 6]
last [1, 2, 3, 4, 5, 6]
 -> 6
init [1, 2, 3, 4, 5, 6]
 -> [1, 2, 3, 4, 5]
take 3 [1, 2, 3, 4, 5, 6]
 -> [1, 2, 3]
drop 3 [1, 2, 3, 4, 5, 6]
 -> [4, 5, 6]
長さ
lenght [1, 2, 3, 4, 5, 6]
 -> 6
空リストチェック
null [1, 2, 3, 4, 5, 6]
 -> False
null []
 -> True
逆リスト
reverse [1, 2, 3]
 -> [3, 2, 1]
包含

ruby的には include?

elem 2 [1, 2, 3]
 -> True
elem 4 [1, 2, 3]
 -> False