Haskell Vektoren addieren?

1 Antwort

Das ist mein Lösungsvorschlag:

addVectors :: (Eq a, Num a) => (a, a, a) -> (a, a, a) -> (a, a, a)
addVectors (a1, a2, a3) (b1, b2, b3) = (a1 + b1, a2 + b2, a3 + b3)

scalarProduct :: (Eq a, Num a) => (a, a, a) -> (a, a, a) -> a
scalarProduct (a1, a2, a3) (b1, b2, b3) = a1*b1 + a2*b2 + a3*b3

isOrthogonal :: (Eq a, Num a) => (a, a, a) -> (a, a, a) -> Bool
isOrthogonal x y =  (scalarProduct x y) == 0

main :: IO ()
main = do
  putStrLn (show (addVectors (1, 2, 3) (3, 2, 1)))
  putStrLn "----------------------------------------------------"
  putStrLn (show (scalarProduct (1, 2, 3) (3, 2, 1)))
  putStrLn "----------------------------------------------------"
  putStrLn (show (isOrthogonal (1, 0, 0) (0, 2, 0)))
  putStrLn "----------------------------------------------------"
  putStrLn (show (isOrthogonal (1, 0, 0) (2, 2, 0)))
  putStrLn "----------------------------------------------------"

Die Klasse Eq wird benötigt, um den Vergleichsoperator == verwenden zu können. Es genügt aber nicht, die Klasse Eq nur bei der Funktion isOrthogonal anzugeben.

Woher ich das weiß:Berufserfahrung – Softwareentwickler