(Arne Babenhauserheide)
2013-08-16: added fibonacci with simple, one-level curly brace infix added fibonacci with simple, one-level curly brace infix
diff --git a/fib.w b/fib.w
new file mode 100755
--- /dev/null
+++ b/fib.w
@@ -0,0 +1,60 @@
+#!/home/arne/wisp/wisp-multiline.sh
+; !#
+
+;; Fibonacci Functions
+
+define : fib 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) ; else
+
+; display : fib 5
+
+;; Try an infix notation with curly brackets - curly infix from readable as simple macro
+define-syntax {
+ syntax-rules : { }
+ : { left infix right }
+ infix left right
+
+; display : { 1 + 2 }
+
+;; Now do the fibonacci again
+define : fibcurl 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 }) ; else
+
+; display : fibcurl 5
+
+;; Do a more complete syntax-rule
+
+;; Try an infix notation with curly brackets - curly infix from readable as simple macro
+define-syntax {
+ syntax-rules : { }
+ : { l in r }
+ in l r
+ : { { ll lin lr } in r }
+ in (lin ll lr) r
+ : { l in { rl rin rr } }
+ in l (rin rl rr)
+ : { { ll lin lr } in { rl rin rr } }
+ in (lin ll lr) (rin rl rr)
+
+;; 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 : { { 1 + 2 } * { 2 * 3 } }
+; display : fibcurl2 5
+; TODO: Make the macro recursive, so it can actually cover arbitrary depths of curly braces.