Haskellで内積の計算

by ysawa

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]

12を取ってきて、掛けあわせて2になる。

23を取ってきて、掛けあわせて6になる。

34を取ってきて、掛けあわせて12になる。

ということ。

結果: 内積の計算

たったの、これだけ。

foldr (+) 0 $ zipWith (*) [1, 2, 3, 4] [4, 3, 2, 1]
20

あら簡単。

この記事を読んだあとに

ysawa

エヌ次元株式会社代表取締役
東京工業大学工学部計算工学専攻卒業
符号理論の応用に関する研究
在学中よりフリーランスエンジニアとして活動
「持続可能な設計」を得意領域とする
会社設立後も設計からアプリ制作や
Webサイトのコーディングまでを幅広く担当
セキュリティスペシャリスト

 このブログについて

このブログは、プログラマやエンジニアのためになる情報を垂れ流しています。
ちょっと異端的なものも含まれているかもしれません。