user
A vector is defined as having three dimensions as being represented by an ordered collection of three numbers:   (X, Y, Z).

If you imagine a graph with the   **x**   and   **y**   axis being at right angles to each other and having a third,   **z**   axis coming out of the page, then a triplet of numbers,   (X, Y, Z)   would represent a point in the region,   and a vector from the origin to the point.

Given the vectors:

```
        A = (a1,  a2,  a3) 
        B = (b1,  b2,  b3) 
        C = (c1,  c2,  c3) 

```

then the following common vector products are defined:

* **The dot product**       (a scalar quantity)

:   :   :   :   A • B = a1b1   +   a2b2   +   a3b3

* **The cross product**       (a vector quantity)

:   :   :   :   A x B = (a2b3  -   a3b2,     a3b1   -   a1b3,     a1b2   -   a2b1)

* **The scalar triple product**       (a scalar quantity)

:   :   :   :   A • (B x C)

* **The vector triple product**       (a vector quantity)

:   :   :   :   A x (B x C)

Task

Given the three vectors:

```
        a = ( 3,    4,    5)
        b = ( 4,    3,    5)
        c = (-5,  -12,  -13)

```

1. Create a named function/subroutine/method to compute the dot product of two vectors.
2. Create a function to compute the cross product of two vectors.
3. Optionally create a function to compute the scalar triple product of three vectors.
4. Optionally create a function to compute the vector triple product of three vectors.
5. Compute and display: `a • b`
6. Compute and display: `a x b`
7. Compute and display: `a • (b x c)`, the scalar triple product.
8. Compute and display: `a x (b x c)`, the vector triple product.

References

* A starting page on Wolfram MathWorld is   Vector Multiplication .
* Wikipedia   dot product.
* Wikipedia   cross product.
* Wikipedia   triple product.

Related tasks

* Dot product
* Quaternion type
assistant
(formerly Perl 6)

**Works with**: rakudo version 2015-11-24

```
sub infix:<⋅> { [+] @^a »*« @^b }

sub infix:<⨯>([$a1, $a2, $a3], [$b1, $b2, $b3]) {
    [ $a2*$b3 - $a3*$b2,
      $a3*$b1 - $a1*$b3,
      $a1*$b2 - $a2*$b1 ];
}

sub scalar-triple-product { @^a ⋅ (@^b ⨯ @^c) }
sub vector-triple-product { @^a ⨯ (@^b ⨯ @^c) }

my @a = <3 4 5>;
my @b = <4 3 5>;
my @c = <-5 -12 -13>;

say (:@a, :@b, :@c);
say "a ⋅ b = { @a ⋅ @b }";
say "a ⨯ b = <{ @a ⨯ @b }>";
say "a ⋅ (b ⨯ c) = { scalar-triple-product(@a, @b, @c) }";
say "a ⨯ (b ⨯ c) = <{ vector-triple-product(@a, @b, @c) }>";

```

Output:

```
("a" => ["3", "4", "5"], "b" => ["4", "3", "5"], "c" => ["-5", "-12", "-13"])
a ⋅ b = 49
a ⨯ b = <5 5 -7>
a ⋅ (b ⨯ c) = 6
a ⨯ (b ⨯ c) = <-267 204 -3>
```