annotate samples/fibmacro.tp @ 331:61f5b794d939

Breaking change: method call syntax now always uses the syntactic receiver as the actual receiver. This makes its behavior different from function call syntax, but solves some problems with methods being shadowed by local variables and the like.
author Michael Pavone <pavone@retrodev.com>
date Sat, 28 Mar 2015 14:21:04 -0700
parents 647f7a2d253b
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
298
647f7a2d253b Committing a simple macro example I put together a while ago
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
1 #{
647f7a2d253b Committing a simple macro example I put together a while ago
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
2 fib <- :n {
647f7a2d253b Committing a simple macro example I put together a while ago
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
3 if: n < 2 {
647f7a2d253b Committing a simple macro example I put together a while ago
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
4 1
647f7a2d253b Committing a simple macro example I put together a while ago
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
5 } else: {
647f7a2d253b Committing a simple macro example I put together a while ago
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
6 (fib: n-1) + (fib: n-2)
647f7a2d253b Committing a simple macro example I put together a while ago
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
7 }
647f7a2d253b Committing a simple macro example I put together a while ago
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
8 }
647f7a2d253b Committing a simple macro example I put together a while ago
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
9 fibm <- macro: :n {
647f7a2d253b Committing a simple macro example I put together a while ago
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
10 eval: n :n {
647f7a2d253b Committing a simple macro example I put together a while ago
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
11 fib: n
647f7a2d253b Committing a simple macro example I put together a while ago
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
12 } else: {
647f7a2d253b Committing a simple macro example I put together a while ago
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
13 quote: (fib: n)
647f7a2d253b Committing a simple macro example I put together a while ago
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
14 }
647f7a2d253b Committing a simple macro example I put together a while ago
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
15 }
647f7a2d253b Committing a simple macro example I put together a while ago
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
16
647f7a2d253b Committing a simple macro example I put together a while ago
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
17 main <- {
647f7a2d253b Committing a simple macro example I put together a while ago
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
18 print: (string: (fibm: 20)) . "\n"
647f7a2d253b Committing a simple macro example I put together a while ago
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
19 }
647f7a2d253b Committing a simple macro example I put together a while ago
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
20
647f7a2d253b Committing a simple macro example I put together a while ago
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
21 }