```****************************  FP HELP SHEET  *****************************  C. Bays
There is much information here, but you need to study the material closely.
TO PRINT THIS OUT ON ONE PAGE: (1) GO TO I.E.  (2) View->Text Size->Smallest (3) Print
tl:<1 2 3> => <2 3>        (tail)
+:<5 6>    =>   11        (add)  (other simple functions are introduced throughout)
******** three "functional forms" :   [ ],  @,  and %  *******
[+,-,*,/]:<2 3>       => <5 -1 6 0.666666667>     (construction)
tl @ tl:<1 2 3 4 5 6>  =>  <3 4 5 6>   (composition)
%35:<1 2 3 4 5 6 7>   => 35   (constant)
%<2 <4 5>>: F  =>  <2 <4 5> >  (note: F and T are valid values, as is, eg., , etc.)
*********** more functions *******
apndl:< 8 <2 3 4>>   =>     <8 2 3 4>
rotr:<1 2 3 4>   =>    <4 1 2 3>
1:<6 7 8 9 10>   =>    6      (selection)
id:<3 4 5 < 7 8>>   =>    <3 4 5 < 7 8>>  (identity)
******** two important functional forms:  &  and ! ( apply-to-all  and  insert ) ******
&+:<<2 3><4 5>>   =>    <5 9>  (apply to all  add)
insert defined: !F:< x1 x2 . . xn > =F:< x1 !F:< x2 . . xn >> . . etc; and !F:< xn > = xn
!+:<2 3 4 5>   =>    14     (insert add)
!*:<2 3 4 5>   =>    120      (insert multiply)
!id:<2 3 4 5>  => <2 <3 <4 5>>>
!tl:<1 2 3 4 5> => <<<<5> > > >  (insert can produce some unusual results.)
+ @ &!+:<<1 2 3 4 5><6 7 8 9 10>>  =>  55  (apply-to-all insert add, then add the pair)
[+@&+,id]:<<2 3><4 5>>   =>    <14 <<2 3> <4 5> > >  (construction and identity)
&[id,id]:< 2 3 4 5 6> => <<2 2><3 3><4 4><5 5><6 6>> (apply-to-all construct.See below)
[id,id]:< 2 3 4 5 6>   =>    <<2 3 4 5 6><2 3 4 5 6>>
concat:<<1 23 ><4 5 6><6 7 8>>   =>    <1 23 4 5 6 6 7 8>
concat@[ [1], tl ]:<1 2 3 4 5>   =>    <1 2 3 4 5>
=:<1 2> =>  F  (boolean operation '=' )  also there are '>' (greater than), '<' ,  etc.
=:<3 3> =>  T
=:<<2 3 4> < 2 3 4>>   =>  T
************** if and while ***************
( condition -> doThisIfConditionTrue ; doThisIfConditionFalse )
(=@[1,%7] ->tl ; id):<4 7 8 9> => <4 7 8 9> (if first element =7 delete; else do nothing)
(=@[1,%7] ->tl ; id):<7 4 8 9> => <4 8 9> ( if first element =7 delete; else do nothing)
(while conditionIsTrue ; continueToDoThis)
(while =@[1,%0] ; tl):<0 0 0 0 0 0 2 3 6>   =>    <2 3 6>  ( while the first element  = 0
continue to take the tail;  i.e. strip off leading zeros)
***************creating a function ******************
{abs (<@[id,%0] -> -@[%0,id]  ;  id) }
{abs} ( note fp prompt at left.  The "abs"  above:  if the element < 0 then make negative)
abs:3   =>    3
abs:-6   =>    6
&abs:<2 3 4 -5 -6 -2 7 8 9 -2>   =>    <2 3 4 5 6 2 7 8 9 2>
{fact (=@[1,%1] -> %1 ; * @ [ 1,  fact @ [ - @ [1,%1] ] ] ) }
{fact}
fact:<3>   =>    6
fact:<5>   =>    120
***************** array operations ***************
trans:<<1 2 3><4 5 6><7 8 9><101 102 103>>     =>
<<1 4 7 101> <2 5 8 102><3 6 9 103>>
distl:<<2 1 3> <<1 2 3><4 5 6><7 8 9><101 102 103>>>    =>
<<<2 1 3><1 2 3>><<2 1 3><4 5 6>><<2 1 3><7 8 9>><<2 1 3><101 102 103>>>
(distribute left.  also,  distr)
&trans@ distl:<<2 1 3> <<1 2 3><4 5 6><7 8 9><101 102 103>>>    =>
<<<2 1><1 2><3 3>> <<2 4><1 5><3 6>><<2 7><1 8><3 9>><<2 101><1 102><3 103>>>
&&*@ &trans@ distl:<<2 1 3><<1 2 3><4 5 6><7 8 9><101 102 103>>>    =>
<<2 2 9><8 5 18><14 8 27><202 102 309>>
&!+@ &&*@ &trans@ distl:<<2 1 3><<1 2 3><4 5 6><7 8 9><101 102 103>>>    =>
<13 31 49 613>
(the above is vector - matrix multiplication)
(now,  here is vector - vector multiplication (also called "inner product"))
trans:<<1 2 3 4 5><6 7 8 9 10>>    =>
<<1 6><2 7><3 8><4 9><5 10>>
&*@ trans:<<1 2 3 4 5><6 7 8 9 10>>   =>    <6 14 24 36 50>
!+@ &*@ trans:<<1 2 3 4 5><6 7 8 9 10>>   =>    130
now, create the function
{ip  !+@ &*@ trans}
{ip}
ip:<<1 2 3 4 5><6 7 8 9 10>>   =>    130
```