Haskell Vektoren addieren?
Hey, die Aufgaben lauten:
1. Eine Funktion schreiben die Vektoren addiert
2. Eine Funktion die Skalarprodukt berechnet und
3. Eine Funktion die anhand des Skalarprodukts bestimmen kann, ob der Winkel rechtwinklig ist.
Meine Ansätze:
1.
addVectors:: (Num a) => a -> a -> a
addVectors (a1, a2, a3) (b1, b2, b3) = (a1 + b1) (a2 + b2) (a3 + b3)
2.
scalarProduct:: (Num a) => a -> a -> a
scalarProduct (a1, a2, a3) (b1, b2, b3) = (a1 * b1) (a2 * b2) (a3 * b3)
3.
Da bin ich mir nicht sicher wie ich es Ausdrücken soll. Am Ende soll halt True rauskommen. Das wahrscheinlich, wenn das Skalarprodukt 0 ergibt.
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.