by shigemk2

当面は技術的なことしか書かない

三次元ベクトルの計算

コンストラクタ≠型コンストラクタ

data Vector a = Vector a a a deriving (Show)

-- Vector a a a -> Vector a a a -> a は間違い
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