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