Vector products: Difference between revisions

Add Seed7 example
m (→‎{{header|Haskell}}: removed some empty lines)
(Add Seed7 example)
Line 1,279:
A . B x C = 6
A x B x C = #(-267 204 -3)</pre>
 
=={{header|Seed7}}==
The program below uses Seed7s capaibility to define operator symbols.
The operators ''dot'' and ''X'' are defined with with priority 6 and assiciativity left-to-right.
 
<lang seed7>$ include "seed7_05.s7i";
include "float.s7i";
 
const type: vec3 is new struct
var float: x is 0.0;
var float: y is 0.0;
var float: z is 0.0;
end struct;
 
const func vec3: vec3 (in float: x, in float: y, in float: z) is func
result
var vec3: result is vec3.value;
begin
result.x := x;
result.y := y;
result.z := z;
end func;
 
$ syntax expr: .(). dot .() is -> 6;
const func float: (in vec3: a) dot (in vec3: b) is
return a.x*b.x + a.y*b.y + a.z*b.z;
 
$ syntax expr: .(). X .() is -> 6;
const func vec3: (in vec3: a) X (in vec3: b) is
return vec3(a.y*b.z - a.z*b.y,
a.z*b.x - a.x*b.z,
a.x*b.y - a.y*b.x);
 
const func string: str (in vec3: v) is
return "(" <& v.x <& ", " <& v.y <& ", " <& v.z <& ")";
 
enable_output(vec3);
 
const func float: scalarTriple (in vec3: a, in vec3: b, in vec3: c) is
return a dot (b X c);
 
const func vec3: vectorTriple (in vec3: a, in vec3: b, in vec3: c) is
return a X (b X c);
 
const proc: main is func
local
const vec3: a is vec3(3.0, 4.0, 5.0);
const vec3: b is vec3(4.0, 3.0, 5.0);
const vec3: c is vec3(-5.0, -12.0, -13.0);
begin
writeln("a = " <& a <& ", b = " <& b <& ", c = " <& c);
writeln("a . b = " <& a dot b);
writeln("a x b = " <& a X b);
writeln("a .(b x c) = " <& scalarTriple(a, b, c));
writeln("a x(b x c) = " <& vectorTriple(a, b, c));
end func;</lang>
 
=={{header|Tcl}}==