やはりVectorを定義することにした
前回はベクトルを[Floating]で済ますことにしたが気が変わって
ベクトルを専用型にすることにした。
正規化されたベクトルをclass型として強制したりするとhaskellっぽいような気がしたので
煩雑なだけかもしれないがやってみる。
Vector.hs
module Vector where data (Floating f)=>Vector f=Vector [f] instance (Floating f)=>Show (Vector f) where show (Vector vaules)=show vaules instance (Floating f)=>Eq (Vector f) where (==) (Vector lhs) (Vector rhs)=all (\ (l, r)->l==r) $ zip lhs rhs
これを基点に加減算、スカラ積、内積・外積を定義する。
class型を継承して正規化ベクトルclass型を定義して使ってみる予定。
効用としては正規化忘れを防げることか。
ついでにHUnitの練習
VectorTest.hs
module VectorTest where import Test.HUnit import Vector main::IO Counts main=do runTestTT $ TestList [ (TestCase $ assertEqual "Vector==Vector" (Vector [0, 0, 0]) (Vector [0, 0, 0])) ]