diff options
Diffstat (limited to 'examples/fibonacci.fp')
-rw-r--r-- | examples/fibonacci.fp | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/examples/fibonacci.fp b/examples/fibonacci.fp new file mode 100644 index 0000000..493ca87 --- /dev/null +++ b/examples/fibonacci.fp @@ -0,0 +1,56 @@ +( + ; core utilities + ($x ^x ^x) $dup + ($_) $drop + ($x $y ^x ^y) $swap + ($a $b $c ^b ^a ^c) $rot + (sub) $- + (0 swap - -) $+ + (()) $nil + (nil eq) $null? + ($x x) $force + (10 emit) $cr + (print) $print + (4 +) $cell+ + ($a $d 2 alloc $p + ^a ^p poke + ^d ^p cell+ poke + ^p + ) $cons + (peek) $car + (cell+ peek) $cdr + + ; if-stmt + ($c $t $f c ^f ^t rot cswap $_ force) $if + ($f $t $c $fn ^f ^t ^c fn) $endif + + ; range + ($self $start $end + ^if (^start ^end eq) + ^nil + (^start ^end ^start 1 + self swap cons) + endif + ) $range + + ; map [$fn $list -> $out-list] + ($self $fn $list + ^if (^list null?) + ^nil + (^list car fn ^list cdr ^fn self swap cons) + endif + ) $map + + ; each [$fn $list] + ($fn (fn ^nil) map drop) $each + + ; implementation + (0 1 ($self $a $b $n + ^if (^n 0 eq) (^b) ( + ^n 1 - ^a ^b + ^b self + ) endif + ) force) $fibonacci + + 30 10 range + ^fibonacci map + ^print each +) |