|  | 
|  | 1 | +(:= (initial Q) { | 
|  | 2 | +  [(-i [C|W]) (+m Q [e e] C W)] | 
|  | 3 | +  [(-i [])    (+m Q e e e)] | 
|  | 4 | +}) | 
|  | 5 | + | 
|  | 6 | +(:= (accept Q) [(-m qa L e R) accept]) | 
|  | 7 | +(:= (reject Q) [(-m qr L C R) reject]) | 
|  | 8 | + | 
|  | 9 | +(:= (if Q1 then Q2) [(-m Q1 L e R) (+m Q2 L e R)]) | 
|  | 10 | +(:= (skip right on Q , D) [(-m Q L D [C|R]) (+m Q [D|L] C R)]) | 
|  | 11 | + | 
|  | 12 | +(:= (if C1 on Q1 then Q2 , write C2 , right) | 
|  | 13 | +  [(-m Q1 L C1 [C|R]) (+m Q2 [C2|L] C R)]) | 
|  | 14 | + | 
|  | 15 | +(:= (if C1 on Q1 then Q2 , write C2 , left) | 
|  | 16 | +  [(-m Q1 [C|L] C1 R) (+m Q2 L C [C2|R])]) | 
|  | 17 | + | 
| 1 | 18 | ' Turing machine accepting words with as many 'a' as 'b' | 
| 2 | 19 | (:= mt { | 
| 3 |  | -  'initial | 
| 4 |  | -  [(-i [C|W]) (+m q0 [e e] C W)] | 
| 5 |  | -  [(-i [])    (+m q0 e e e)] | 
| 6 |  | -  'accept | 
| 7 |  | -  [(-m q0 L e R) (+m qa L e R)] | 
| 8 |  | -  [(-m qa L e R) accept] | 
| 9 |  | -  'initial skip | 
| 10 |  | -  [(-m q0 L sep [C|R]) (+m q0 [sep|L] C R)] | 
|  | 20 | +  #(initial q0) | 
|  | 21 | +  ' accept | 
|  | 22 | +  #(accept qa) | 
|  | 23 | +  #(if q0 then qa) | 
|  | 24 | +  ' reject | 
|  | 25 | +  #(reject qr) | 
|  | 26 | +  #(if q2 then qr) | 
|  | 27 | +  #(if q3 then qr) | 
|  | 28 | +  ' initial skip | 
|  | 29 | +  #(skip right on q0 , sep) | 
| 11 | 30 |   'mark | 
| 12 |  | -  [(-m q0 L a [C|R]) (+m q2 [sep|L] C R)] | 
| 13 |  | -  [(-m q0 L b [C|R]) (+m q3 [sep|L] C R)] | 
|  | 31 | +  #(if a on q0 then q2 , write sep , right) | 
|  | 32 | +  #(if b on q0 then q3 , write sep , right) | 
| 14 | 33 |   'skip | 
| 15 |  | -  [(-m q2 L a [C|R])   (+m q2 [a|L] C R)] | 
| 16 |  | -  [(-m q2 L sep [C|R]) (+m q2 [sep|L] C R)] | 
| 17 |  | -  [(-m q3 L b [C|R])   (+m q3 [b|L] C R)] | 
| 18 |  | -  [(-m q3 L sep [C|R]) (+m q3 [sep|L] C R)] | 
|  | 34 | +  #(skip right on q2 , a) | 
|  | 35 | +  #(skip right on q2 , sep) | 
|  | 36 | +  #(skip right on q3 , b) | 
|  | 37 | +  #(skip right on q3 , sep) | 
| 19 | 38 |   'join | 
| 20 |  | -  [(-m q2 [C|L] b R) (+m q1 L C [sep|R])] | 
| 21 |  | -  [(-m q3 [C|L] a R) (+m q1 L C [sep|R])] | 
|  | 39 | +  #(if b on q2 then q1 , write sep , left) | 
|  | 40 | +  #(if a on q3 then q1 , write sep , left) | 
| 22 | 41 |   'return | 
| 23 |  | -  [(-m q1 [C|L] a R)   (+m q1 L C [a|R])] | 
| 24 |  | -  [(-m q1 [C|L] b R)   (+m q1 L C [b|R])] | 
| 25 |  | -  [(-m q1 [C|L] sep R) (+m q1 L C [sep|R])] | 
| 26 |  | -  [(-m q1 L e [C|R])   (+m q0 [e|L] C R)] | 
| 27 |  | -  'reject | 
| 28 |  | -  [(-m q2 L e R) (+m qr L e R)] | 
| 29 |  | -  [(-m q3 L e R) (+m qr L e R)] | 
| 30 |  | -  [(-m qr L C R) reject]}) | 
| 31 |  | - | 
| 32 |  | -(show (interact @(+i [a e]) #mt)) | 
| 33 |  | -(show (interact @(+i [b e]) #mt)) | 
| 34 |  | -(show (interact @(+i [a b b e]) #mt)) | 
| 35 |  | - | 
| 36 |  | -(show (interact @(+i [e]) #mt)) | 
| 37 |  | -(show (interact @(+i [a b e]) #mt)) | 
| 38 |  | -(show (interact @(+i [a a b b e]) #mt)) | 
| 39 |  | -(show (interact @(+i [a b b a e]) #mt)) | 
| 40 |  | -(show (interact @(+i [a b a b e]) #mt)) | 
|  | 42 | +  #(if a on q1 then q1 , write a , left) | 
|  | 43 | +  #(if b on q1 then q1 , write b , left) | 
|  | 44 | +  #(if sep on q1 then q1 , write sep , left) | 
|  | 45 | +  #(if e on q1 then q0 , write e , right) | 
|  | 46 | +}) | 
|  | 47 | + | 
|  | 48 | +(:= (word W) (+i W)) | 
|  | 49 | + | 
|  | 50 | +(show (interact @#(word [a e]) #mt)) | 
|  | 51 | +(show (interact @#(word [b e]) #mt)) | 
|  | 52 | +(show (interact @#(word [a b b e]) #mt)) | 
|  | 53 | + | 
|  | 54 | +(show (interact @#(word [e]) #mt)) | 
|  | 55 | +(show (interact @#(word [a b e]) #mt)) | 
|  | 56 | +(show (interact @#(word [a a b b e]) #mt)) | 
|  | 57 | +(show (interact @#(word [a b b a e]) #mt)) | 
|  | 58 | +(show (interact @#(word [a b a b e]) #mt)) | 
0 commit comments