Haskell入門7日目
七日目

- 作者: Miran Lipovača,田中英行,村主崇行
- 出版社/メーカー: オーム社
- 発売日: 2012/05/23
- メディア: 単行本(ソフトカバー)
- 購入: 25人 クリック: 580回
- この商品を含むブログ (69件) を見る
京都に帰る電車の中で。
(しばらくHaskellする時間とれなくなりそうだけど許して
5.4
- ラムダ式。Android で書かせてくれ…
- 引数を受け取って、その次に値を返す感じですね。
- これで前までできないのかなって言ってたやつもできるようになりそう。
- カリー化で十分なとこはカリー化で。
- 試しに
map (*3 + 1) [1,3,0,3]
ってやったらできなかった。map (\x -> x * 3 + 1) [1,3,0,3]
でできる。
zipWith (\a b -> (a,b)) [1,2,3] [3,4,5,5] => [(1,3), (2,4), (3,5)]
- やっぱラムダ式は楽でいいなあ。これできないんだろうかっていうのが大体できるようになってて最高って感じがする。
- ラムダ式をそのまま変数にすることもできるのか(しないけど
- flip そんなに使うことはなさそう。
5.5
- (x:xs) は便利ですよね
- 折り紙のイラストあるけど海外でも折り紙ってするんだろうか。てかこれ鶴だし。
再帰、リストを一つの要素から作る場合は値を生成してどんどん連結していく感覚で、リストから一つの要素にする場合は値をパターンマッチで分割してリストの要素をどんどん一つの値に押し込めていくという感じだ。
fold
系は 処理、初期値(アキュムレータ)、対象とするリストの順番。- まあこれだと再帰でシュッと書けそう。
nonySum (x:xs) = x + nonySum xs
的な感じ。
引数省略みたいなこわいこともできるのかぁ。
- scala のコードみてもわけわからんかったけどアレも省略されてるんかな
foldr
はfoldl
渡される変数のの順番が逆- 右から畳み込むの、リストを生成するのには便利そう。
reverse
実装したらflip
便利だと気づいた。というか畳み込みってただの
for
みたいなもんでは?- python の
for line in f: ~
的な
- python の
foldr
でも無限リストに対応するの不思議だと思ったけど、遅延評価だから最後のが引き出されるまでにそれまでも評価するので途中で終わるやつなら対応出来るってことかな。- カリー化とかそんな感じな気がしてきた?
- 遅延評価、
sum
とかだと計算数を少なくする代わりにメモリとか犠牲になりそう。 scan
はアッハイって感じだったtakeWhile (<1000) (scanl1 (+) (map (^2) [1..])
だと、scanl1
から出される数値をtakeWhile
で検査してる。(scanl1
から出されるのは無限リストで、ここでも遅延評価が生きてそう