Changeset 8853 in project


Ignore:
Timestamp:
02/24/08 22:05:24 (11 years ago)
Author:
Alaric Snell-Pym
Message:

tagged-begin wiki docs tidied up a bit

File:
1 edited

Legend:

Unmodified
Added
Removed
  • wiki/tagged-begin

    r8852 r8853  
    77== Examples
    88
    9 <example>
    10   <init>(use tagged-begin)</init>
    11   <expr>
    12 ; Example 1 (tagged-begin returns (void))
    13  (let ([i 0])
     9Example 1 ({{tagged-begin}} returns {{(void)}})
     10
     11<example>
     12  <init>(use tagged-begin)</init>
     13  <expr>(let ([i 0])
    1414   (tagged-begin
    1515    loop (set! i (+ i 1))
     
    1818   <result>41</result>
    1919</example>
    20    
    21 <example>
    22   <init>(use tagged-begin)</init>
    23   <expr>
    24 ; Example 2 (tagged-begin returns 42)
    25  (let ([i 0])
     20
     21Example 2 ({{tagged-begin}} returns {{42}})
     22
     23<example>
     24  <init>(use tagged-begin)</init>
     25  <expr>(let ([i 0])
    2626   (tagged-begin
    2727    loop (set! i (+ i 1))
     
    3131</example>
    3232
    33 <example>
    34   <init>(use tagged-begin)</init>
    35   <expr>
    36 ; Example 3 (tagged-begin returns 43)
    37  (let ([i 0])
     33Example 3 ({{tagged-begin}} returns {{43}})
     34
     35<example>
     36  <init>(use tagged-begin)</init>
     37  <expr>(let ([i 0])
    3838   (tagged-begin
    3939    loop (set! i (+ i 1))
     
    4545</example>
    4646
    47 <example>
    48   <init>(use tagged-begin)</init>
    49   <expr>
    50 ; Example 4 (http://www.emacswiki.org/cgi-bin/wiki.pl?StateMachine)
    51 
    52 (define (display/nl v)
    53   (display v)
    54   (newline))
    55 
    56 (let ((a 0))
     47Example 4 ([[http://www.emacswiki.org/cgi-bin/wiki.pl?StateMachine]])
     48
     49<example>
     50  <init>(use tagged-begin)</init>
     51  <expr>(begin
     52  (define (display/nl v)
     53    (display v)
     54    (newline))
     55
     56  (let ((a 0))
    5757   (tagged-begin
    5858     start
     
    6969      (go part-1)
    7070     end
    71       (display/nl "We're done printing the odd numbers between 0 and 10")))</expr>
     71      (display/nl "We're done printing the odd numbers between 0 and 10"))))</expr>
    7272  <output>1
    73733
     
    7878</example>
    7979
    80 <example>
    81   <init>(use tagged-begin)</init>
    82   <expr>
    83 ; Example 5 ( Knuth: "The Art of Computer Programming", vol1, p.176)
    84 
    85 ; Inplace inversion of a permutation represented as a vector.
    86 
    87 (define permutation (vector 'dummy 6 2 1 5 4 3))      ; (Knuth counts from 1 not 0 :-) )
    88 (define n           (- (vector-length permutation) 1))
    89 (define (X i)       (vector-ref permutation i))
    90 (define (X! i j)    (vector-set! permutation i j))
    91 
    92 (let ([m 0] [i 0] [j 0])
    93   (tagged-begin
    94    I1   ; Initialize
    95         (set! m n)
    96         (set! j -1)
    97    I2   ; Next element
    98         (set! i (X m))
    99         (if (< i 0) (go I5))
    100    I3   ; Invert one
    101         (X! m j)
    102         (set! j (- m))
    103         (set! m i)
    104         (set! i (X m))
    105    I4   ; End of cycle?
    106         (if (> i 0) (go I3))
    107         (set! i j)
    108    I5   ; Store final value
    109         (X! m (- i))
    110    I6   ; Loop on m
    111         (set! m (- m 1))
    112         (if (> m 0) (go I2))))
    113 
    114 permutation</expr>
     80Example 5 ( Knuth: "The Art of Computer Programming", vol1, p.176): Inplace inversion of a permutation represented as a vector.
     81
     82<example>
     83  <init>(use tagged-begin)</init>
     84  <expr>(begin
     85
     86  (define permutation (vector 'dummy 6 2 1 5 4 3))      ; (Knuth counts from 1 not 0 :-) )
     87  (define n           (- (vector-length permutation) 1))
     88  (define (X i)       (vector-ref permutation i))
     89  (define (X! i j)    (vector-set! permutation i j))
     90
     91  (let ([m 0] [i 0] [j 0])
     92    (tagged-begin
     93     I1   ; Initialize
     94          (set! m n)
     95          (set! j -1)
     96     I2   ; Next element
     97          (set! i (X m))
     98          (if (< i 0) (go I5))
     99     I3   ; Invert one
     100          (X! m j)
     101          (set! j (- m))
     102          (set! m i)
     103          (set! i (X m))
     104     I4   ; End of cycle?
     105          (if (> i 0) (go I3))
     106          (set! i j)
     107     I5   ; Store final value
     108          (X! m (- i))
     109     I6   ; Loop on m
     110          (set! m (- m 1))
     111          (if (> m 0) (go I2))))
     112
     113  permutation)</expr>
    115114  <result>#(dummy 3 2 6 5 4 1)</result>
    116115</example>
    117116
    118 <example>
    119   <init>(use tagged-begin)</init>
    120   <expr>
    121 ; Example 6 (The CommonLisp Hyper Spec examples of tagbody)     
    122  
    123 (define val 'foo)
    124 (tagged-begin
     117Example 6 (The CommonLisp Hyper Spec examples of {{tagbody}})
     118
     119<example>
     120  <init>(use tagged-begin)</init>
     121  <expr>(begin
     122  (define val 'foo)
     123  (tagged-begin
    125124    (set! val 1)
    126125       (go a)
    127     (set! val (+ val 4))
     126   c   (set! val (+ val 4))
    128127       (go b)
    129128       (set! val (+ val 32))
    130     (set! val (+ val 2))
     129   a   (set! val (+ val 2))
    131130       (go c)
    132131       (set! val (+ val 64))
    133     (set! val (+ val 8)))
    134 
    135 (define (f1 flag)
    136   (let ((n 1))
    137     (tagged-begin
    138      (set! n (f2 flag (lambda () (go out))))
    139      out
    140      (return n))))
    141 
    142 (define (f2 flag escape)
    143   (if flag (escape) 2))
    144 
    145 (list val (f1 #f) (f1 #t))</expr>
     132   b   (set! val (+ val 8)))
     133
     134  (define (f1 flag)
     135    (let ((n 1))
     136      (tagged-begin
     137       (set! n (f2 flag (lambda () (go out))))
     138       out
     139       (return n))))
     140
     141  (define (f2 flag escape)
     142    (if flag (escape) 2))
     143
     144  (list val (f1 #f) (f1 #t)))</expr>
    146145  <result>(15 2 1)</result>
    147146</example>
    148147
    149 <example>
    150   <init>(use tagged-begin)</init>
    151   <expr>
    152 ; Example 7
    153 ;   Demonstrates lexical scoping of tagged-begins,
    154 ;   and that an inner tagged-begin can use an outer tag.
    155 
    156 (tagged-begin
     148Example 7: Demonstrates lexical scoping of tagged-begins, and that an inner tagged-begin can use an outer tag.
     149
     150<example>
     151  <init>(use tagged-begin)</init>
     152  <expr>(tagged-begin
    157153 a (tagged-begin
    158154      (go b))
    159  b (return 'hello-world))
    160 </expr>
     155 b (return 'hello-world))</expr>
    161156  <result>hello-world</result>
    162157</example>
    163158
    164 <example>
    165   <init>(use tagged-begin)</init>
    166   <expr>
    167 ; Demonstrates that tags are lexically shadowed.
    168 (tagged-begin
     159Example 8: Demonstrates that tags are lexically shadowed.
     160
     161<example>
     162  <init>(use tagged-begin)</init>
     163  <expr>(tagged-begin
    169164 a (tagged-begin
    170165        (go b)
     
    172167      b (go c))
    173168 b (return 'wrong)
    174  c (return 'correct))
    175 </expr>
     169 c (return 'correct))</expr>
    176170  <result>correct</result>
    177171</example>
    178172
    179 <example>
    180   <init>(use tagged-begin)</init>
    181   <expr>
    182 ;;; EXPANSION EXAMPLE           
    183            
    184 (pp (macroexpand
     173Expansion example:
     174
     175<example>
     176  <init>(use tagged-begin)</init>
     177  <expr>(pp (macroexpand
    185178  '(tagged-begin
    186179       (set! val 1)
Note: See TracChangeset for help on using the changeset viewer.