wisp
 
(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.