(Arne Babenhauserheide)
2014-02-11: now that we support curly braces, rewrite fibonacci to use curly now that we support curly braces, rewrite fibonacci to use curly infix.
diff --git a/examples/fib.w b/examples/fib.w
--- a/examples/fib.w
+++ b/examples/fib.w
@@ -3,7 +3,7 @@
;; Fibonacci Functions
-define : fib n
+define : fibonacci n
. "Get Fibonacci Element N in Linear Time"
let rek : (i 0) (u 1) (v 1)
if : >= i : - n 2
@@ -12,51 +12,68 @@ define : fib n
; 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
+;; Try it with curly infix
-; display : { 1 + 2 }
+;; First activate curly infix
+. #!curly-infix
-;; Now do the fibonacci again
-define : fibcurl n
- . "Get Fibonacci Elements in Linear Time"
+;; 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 }) }
+ if {i >= {n - 2}}
. v
- rek ({ i + 1 }) v ({ u + v }) ; else
+ rek {i + 1} v {u + v}
-; display : fibcurl 5
-;; Do a more complete syntax-rule
+
+;; Due to the compatibility with curly-infix, the following is no longer possible.
;; 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 }
-
-;; But to be frank: Prefix looks better.
-
-display : { { 1 + 2 } * { 2 * 3 } }
-; display : fibcurl2 5
-; TODO: Make the macro recursive, so it can actually cover arbitrary depths of curly braces.
+;; 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 }
+;;
+;; ;; But to be frank: Prefix looks better.
+;;
+;; display : { { 1 + 2 } * { 2 * 3 } }
+;; ; display : fibcurl2 5
+;; ; TODO: Make the macro recursive, so it can actually cover arbitrary depths of curly braces.