#!/usr/bin/env sh
# -*- wisp -*-
guile-2.0 -L $(dirname $(dirname $(realpath "$0"))) -c '(import (language wisp spec))'
exec guile-2.0 -L $(dirname $(dirname $(realpath "$0"))) --language=wisp -s "$0" "$@"
; !#
;; Fibonacci Functions
define : fibonacci n
. "Get Fibonacci Element N in Linear Time"
let rek : (i 0) (u 1) (v 1)
if : >= i : - n 2
. v
rek (+ i 1) v (+ u v) ; else
; display : fib 5
;; Try it with curly infix
;; First activate curly infix
. #!curly-infix
;; Now define fibonacci with curly infix.
define : fibonacci n
. "Get Fibonacci Element N in Linear Time"
let rek : (i 0) (u 1) (v 1)
if {i >= {n - 2}}
. v
rek {i + 1} v {u + v}
display
. {1 + 1}
newline
;; And a complete infix-fibonacci
define : fibcurl2 n
. "Get Fibonacci Elements in Linear Time"
let rek : (i 0) (u 1) (v 1)
if { i >= { n - 2 } }
. v
rek { i + 1 } v { u + v }
display : fibcurl2 5
newline