Jump to content

Vector products: Difference between revisions

Added Haskell
(Added Nemerle)
(Added Haskell)
Line 468:
6
{-267 204 -3}
</pre>
 
=={{header|Haskell}}==
<lang haskell>
type Vector a = [a]
type Scalar a = a
 
a,b,c,d :: Vector Int
a = [ 3, 4, 5 ]
b = [ 4, 3, 5 ]
c = [-5,-12,-13 ]
d = [ 3, 4, 5, 6 ]
 
dot :: (Num t) => Vector t -> Vector t -> Scalar t
dot u v | length u == length v = sum $ zipWith (*) u v
| otherwise = error "Dotted Vectors must be of equal dimension."
 
cross :: (Num t) => Vector t -> Vector t -> Vector t
cross u v | length u == 3 && length v == 3 =
[u !! 1 * v !! 2 - u !! 2 * v !! 1,
u !! 2 * v !! 0 - u !! 0 * v !! 2,
u !! 0 * v !! 1 - u !! 1 * v !! 0]
| otherwise = error "Crossed Vectors must both be three dimensional."
 
scalarTriple :: (Num t) => Vector t -> Vector t -> Vector t -> Scalar t
scalarTriple q r s = dot q $ cross r s
 
vectorTriple :: (Num t) => Vector t -> Vector t -> Vector t -> Vector t
vectorTriple q r s = cross q $ cross r s
 
main = do
mapM_ putStrLn [ "a . b = " ++ (show $ dot a b)
, "a x b = " ++ (show $ cross a b)
, "a . b x c = " ++ (show $ scalarTriple a b c)
, "a x b x c = " ++ (show $ vectorTriple a b c)
, "a . d = " ++ (show $ dot a d) ]
</lang>
Output:
<pre>
a . b = 49
a x b = [5,5,-7]
a . b x c = 6
a x b x c = [-267,204,-3]
a . d = *** Exception: Dotted Vectors must be of equal dimension.
</pre>
 
Anonymous user
Cookies help us deliver our services. By using our services, you agree to our use of cookies.