This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
at:tutorial:metaprogramming [2007/07/27 07:45] jdedecker |
at:tutorial:metaprogramming [2008/08/01 14:31] tvcutsem * |
||
---|---|---|---|
Line 25: | Line 25: | ||
==== Quasiquoting and splicing ==== | ==== Quasiquoting and splicing ==== | ||
+ | Quasiquoting and splicing are an advanced and powerful metaprogramming techniques that control the evaluation process and allow one to manipulate the evaluation process of the abstract syntax tree. | ||
- | === Qouting | + | === Quoting |
Any valid AmbientTalk expression can be quoted. This prevents the expression from being evaluated. Instead, it is returned literally. | Any valid AmbientTalk expression can be quoted. This prevents the expression from being evaluated. Instead, it is returned literally. | ||
Line 63: | Line 64: | ||
== Expressions == | == Expressions == | ||
- | To quote a complete expression, it has to be wrapped in parantheses: | + | To quote a complete expression, it has to be wrapped in parentheses: |
< | < | ||
Line 101: | Line 102: | ||
With this construct, all the elements of the literal table are evaluated. By quoting a literal table, all the elements are quoted instead of evaluated: | With this construct, all the elements of the literal table are evaluated. By quoting a literal table, all the elements are quoted instead of evaluated: | ||
< | < | ||
- | > | + | > |
>> | >> | ||
</ | </ | ||
Line 194: | Line 195: | ||
>read: " | >read: " | ||
>> | >> | ||
- | >eval: `(1+2) in: self | + | >def result := eval: `(1+2) in: self |
>>3 | >>3 | ||
- | > | + | > |
- | >>" | + | >>" |
</ | </ | ||
Line 204: | Line 205: | ||
< | < | ||
>def o := object: { def x := 4 } | >def o := object: { def x := 4 } | ||
- | >>< | + | >>< |
>eval: `x in: o | >eval: `x in: o | ||
>>4 | >>4 | ||
</ | </ |