三次元ベクトルの型とベクトルの演算を作る
data Vector a = Vector a a a deriving (Show) vplus :: (Num a) => Vector a -> Vector a -> Vector a (Vector i j k) `vplus` (Vector l m n) = Vector (i+l) (j+m) (k+n) dotProd :: (Num a) => Vector a -> Vector a -> a (Vector i j k) `dotProd` (Vector l m n) = i*l + j*m + k*n vmult :: (Num a) => Vector a -> a -> Vector a (Vector i j k) `vmult` m = Vector (i*m) (j*m) (k*m)
これらの関数は、
- ベクトルの加算
- ベクトルの内積
- ベクトルをスカラー倍する
実行結果
*Main> Vector 3 5 8 `vplus` Vector 9 2 8 Vector 12 7 16 *Main> Vector 3 5 8 `vplus` Vector 9 2 8 `vplus` Vector 0 2 3 Vector 12 9 19 *Main> Vector 3 9 7 `vmult` 10 Vector 30 90 70 *Main> Vector 4 9 5 `dotProd` Vector 9.0 2.0 4.0 74.0 *Main> Vector 2 9 3 `vmult` (Vector 4 9 5 `dotProd` Vector 9 2 4) Vector 148 666 222
ポイント
- Vector a という型なので Vector Int も Vector Float が使える
- 型クラス制約の Num a が関数に指定されているので Vector Char などは使えない
- Vector Int と Vector Double を加算したりはできない
所感
ベクトルの内積を調べていたが、高校時代に数学がよくわからなかった理由が「何故そうなるのか?それをなんのために使うのか?」がわからなかったため。教師もそこまで説明していると消化するべきカリキュラムが終わらなかったのだと思う。しかし、以下の記事を読むとしっくり来る回答があった。
たまたまそうなる、という捉え方ができていればもう少し数学を楽しめたかもしれない。化学や物理と同じように現象としてそうなっているということをもっと不思議に感じておけば興味を持って取り組めたのではないかと今更ながら思った。

- 作者: MiranLipovaca
- 出版社/メーカー: オーム社
- 発売日: 2017/07/14
- メディア: Kindle版
- 購入: 4人 クリック: 9回
- この商品を含むブログを見る