2つのベクトルがどれだけ近いかを
示す指標に内積を用いることがあります。
そして、Haskell で内積計算をしようとしたときに、
驚くべき簡単さに気づかされる。
foldr
foldr
は、畳込み(たたみこみ)のことである。
名前の通り、どんどん積み重ねていくイメージです。
foldr (+) 0 [1, 2, 3, 4] 10
0
から4
までの足し算が、10
になるということ。
zipWith
zipWith
は、2つのリストからそれぞれ、1つずつ要素をとって、
1つの新しいリストを作り出す関数です。
zipWith (*) [1, 2, 3] [2, 3, 4] [2,6,12]
1
と2
を取ってきて、掛けあわせて2
になる。
2
と3
を取ってきて、掛けあわせて6
になる。
3
と4
を取ってきて、掛けあわせて12
になる。
ということ。
結果: 内積の計算
たったの、これだけ。
foldr (+) 0 $ zipWith (*) [1, 2, 3, 4] [4, 3, 2, 1] 20
あら簡単。
この記事を読んだあとに
- 書いた人のツイッター – Follow me!
- 『売上を3年連続20%成長させた18の秘訣』
- 運営しているアクションゲーム