shen-ruby 0.12.1 → 0.13.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (102) hide show
  1. checksums.yaml +4 -4
  2. data/HISTORY.md +5 -0
  3. data/README.md +8 -12
  4. data/Rakefile +4 -9
  5. data/bin/shen_test_suite.rb +0 -1
  6. data/bin/srrepl +2 -4
  7. data/lib/shen_ruby/shen.rb +98 -0
  8. data/lib/shen_ruby/version.rb +1 -1
  9. data/shen-ruby.gemspec +3 -3
  10. data/shen/README.txt +9 -13
  11. data/shen/release/BSD +24 -0
  12. data/shen/release/klambda/core.kl +157 -0
  13. data/shen/release/klambda/declarations.kl +109 -0
  14. data/shen/release/klambda/load.kl +59 -0
  15. data/shen/release/klambda/macros.kl +91 -0
  16. data/shen/release/klambda/prolog.kl +228 -0
  17. data/shen/release/klambda/reader.kl +198 -0
  18. data/shen/release/klambda/sequent.kl +142 -0
  19. data/shen/release/klambda/sys.kl +253 -0
  20. data/shen/release/klambda/t-star.kl +123 -0
  21. data/shen/release/klambda/toplevel.kl +110 -0
  22. data/shen/release/klambda/track.kl +79 -0
  23. data/shen/release/{k_lambda → klambda}/types.kl +41 -63
  24. data/shen/release/klambda/writer.kl +81 -0
  25. data/shen/release/klambda/yacc.kl +87 -0
  26. data/shen/release/license.pdf +0 -0
  27. data/shen/release/test_programs/Chap13/problems.txt +26 -26
  28. data/shen/release/test_programs/README.shen +52 -52
  29. data/shen/release/test_programs/TinyLispFunctions.txt +15 -15
  30. data/shen/release/test_programs/TinyTypes.shen +55 -55
  31. data/shen/release/test_programs/binary.shen +24 -24
  32. data/shen/release/test_programs/bubble_version_1.shen +28 -28
  33. data/shen/release/test_programs/bubble_version_2.shen +22 -22
  34. data/shen/release/test_programs/calculator.shen +21 -21
  35. data/shen/release/test_programs/cartprod.shen +23 -23
  36. data/shen/release/test_programs/change.shen +25 -25
  37. data/shen/release/test_programs/classes-defaults.shen +94 -94
  38. data/shen/release/test_programs/classes-inheritance.shen +100 -100
  39. data/shen/release/test_programs/classes-typed.shen +74 -74
  40. data/shen/release/test_programs/classes-untyped.shen +46 -46
  41. data/shen/release/test_programs/depth_.shen +14 -14
  42. data/shen/release/test_programs/einstein.shen +34 -34
  43. data/shen/release/test_programs/fruit_machine.shen +46 -46
  44. data/shen/release/test_programs/interpreter.shen +217 -217
  45. data/shen/release/test_programs/metaprog.shen +85 -85
  46. data/shen/release/test_programs/minim.shen +192 -192
  47. data/shen/release/test_programs/mutual.shen +11 -11
  48. data/shen/release/test_programs/n_queens.shen +45 -45
  49. data/shen/release/test_programs/newton_version_1.shen +33 -33
  50. data/shen/release/test_programs/newton_version_2.shen +24 -24
  51. data/shen/release/test_programs/parse.prl +14 -14
  52. data/shen/release/test_programs/parser.shen +51 -51
  53. data/shen/release/test_programs/powerset.shen +10 -10
  54. data/shen/release/test_programs/prime.shen +10 -10
  55. data/shen/release/test_programs/prolog.shen +78 -78
  56. data/shen/release/test_programs/proof_assistant.shen +80 -80
  57. data/shen/release/test_programs/proplog_version_1.shen +25 -25
  58. data/shen/release/test_programs/proplog_version_2.shen +27 -27
  59. data/shen/release/test_programs/qmachine.shen +66 -66
  60. data/shen/release/test_programs/red-black.shen +54 -54
  61. data/shen/release/test_programs/search.shen +55 -55
  62. data/shen/release/test_programs/semantic_net.shen +44 -44
  63. data/shen/release/test_programs/spreadsheet.shen +34 -34
  64. data/shen/release/test_programs/stack.shen +27 -27
  65. data/shen/release/test_programs/streams.shen +20 -20
  66. data/shen/release/test_programs/strings.shen +57 -57
  67. data/shen/release/test_programs/structures-typed.shen +71 -71
  68. data/shen/release/test_programs/structures-untyped.shen +41 -41
  69. data/shen/release/test_programs/tests.shen +232 -232
  70. data/shen/release/test_programs/types.shen +11 -11
  71. data/shen/release/test_programs/whist.shen +239 -239
  72. data/shen/release/test_programs/yacc.shen +132 -132
  73. metadata +21 -35
  74. data/shen/lib/shen_ruby/shen.rb +0 -160
  75. data/shen/license.txt +0 -34
  76. data/shen/release/benchmarks/N_queens.shen +0 -45
  77. data/shen/release/benchmarks/README.shen +0 -14
  78. data/shen/release/benchmarks/benchmarks.shen +0 -52
  79. data/shen/release/benchmarks/bigprog +0 -2173
  80. data/shen/release/benchmarks/einstein.shen +0 -33
  81. data/shen/release/benchmarks/heatwave.gif +0 -0
  82. data/shen/release/benchmarks/interpreter.shen +0 -219
  83. data/shen/release/benchmarks/jnk.shen +0 -194
  84. data/shen/release/benchmarks/picture.jpg +0 -0
  85. data/shen/release/benchmarks/plato.jpg +0 -0
  86. data/shen/release/benchmarks/powerset.shen +0 -10
  87. data/shen/release/benchmarks/prime.shen +0 -10
  88. data/shen/release/benchmarks/short.shen +0 -129
  89. data/shen/release/benchmarks/text.txt +0 -68
  90. data/shen/release/k_lambda/core.kl +0 -181
  91. data/shen/release/k_lambda/declarations.kl +0 -131
  92. data/shen/release/k_lambda/load.kl +0 -84
  93. data/shen/release/k_lambda/macros.kl +0 -112
  94. data/shen/release/k_lambda/prolog.kl +0 -252
  95. data/shen/release/k_lambda/reader.kl +0 -222
  96. data/shen/release/k_lambda/sequent.kl +0 -166
  97. data/shen/release/k_lambda/sys.kl +0 -271
  98. data/shen/release/k_lambda/t-star.kl +0 -139
  99. data/shen/release/k_lambda/toplevel.kl +0 -135
  100. data/shen/release/k_lambda/track.kl +0 -103
  101. data/shen/release/k_lambda/writer.kl +0 -105
  102. data/shen/release/k_lambda/yacc.kl +0 -113
@@ -1,85 +1,85 @@
1
- (define parse
2
- D Sentence -> (let Parse (D [Sentence []])
3
- (if (parsed? Parse) (output_parse Parse) ungrammatical)))
4
-
5
- (define parsed?
6
- [[] Output] -> true
7
- _ -> false)
8
-
9
- (define output_parse
10
- [_ Output] -> Output)
11
-
12
- (define generate_parser
13
- Grammar -> (map (/. X (compile_rules X)) (group_rules (parenthesise_rules Grammar))))
14
-
15
- (define parenthesise_rules
16
- [S --> | Rest] -> (parenthesise_rules1 [S -->] Rest))
17
-
18
- (define parenthesise_rules1
19
- Rule [] -> [Rule]
20
- Rule [S --> | Rest] -> [Rule | (parenthesise_rules1 [S -->] Rest)]
21
- Rule [X | Y] -> (parenthesise_rules1 (append Rule [X]) Y))
22
-
23
- (define group_rules
24
- Rules -> (group_rules1 Rules []))
25
-
26
- (define group_rules1
27
- [] Groups -> Groups
28
- [Rule | Rules] Groups -> (group_rules1 Rules (place_in_group Rule Groups)))
29
-
30
- (define place_in_group
31
- Rule [] -> [[Rule]]
32
- Rule [Group | Groups] -> [[Rule | Group] | Groups]
33
- where (belongs-in? Rule Group)
34
- Rule [Group | Groups] -> [Group | (place_in_group Rule Groups)])
35
-
36
- (define belongs-in?
37
- [S | _] [[S | _] | _] -> true
38
- _ _ -> false)
39
-
40
- (define compile_rules
41
- Rules -> (if (lex? Rules)
42
- (generate_code_for_lex Rules)
43
- (generate_code_for_nonlex Rules)))
44
-
45
- (define lex?
46
- [[S --> Terminal] | _] -> (string? Terminal)
47
- _ -> false)
48
-
49
- (define generate_code_for_nonlex
50
- Rules -> (eval (append [define (get_characteristic_non_terminal Rules)
51
- | (mapapp gcfn_help Rules)]
52
- [(protect X) -> [fail]])))
53
-
54
- (define mapapp
55
- _ [] -> []
56
- F [X | Y] -> (append (F X) (mapapp F Y)))
57
-
58
- (define get_characteristic_non_terminal
59
- [[CNT | _] | _] -> CNT)
60
-
61
- (define gcfn_help
62
- Rule -> [(protect Parameter)
63
- <-
64
- (apply_expansion Rule
65
- [listit [head (protect Parameter)]
66
- [cons [listit | Rule]
67
- [head [tail (protect Parameter)]]]])])
68
-
69
- (define apply_expansion
70
- [CNT --> | Expansion] Parameter -> (ae_help Expansion Parameter))
71
-
72
- (define ae_help
73
- [] Code -> Code
74
- [NT | Expansion] Code -> (ae_help Expansion [NT Code]))
75
-
76
- (define generate_code_for_lex
77
- Rules -> (eval (append [define (get_characteristic_non_terminal Rules)
78
- (protect X) -> [fail] where [= (protect X) [fail]]
79
- | (mapapp (function gcfl_help) Rules)]
80
- [(protect X) -> [fail]])))
81
-
82
- (define gcfl_help
83
- [CNT --> Terminal] -> [[cons [cons Terminal (protect P)] [cons (protect Parse) []]]
84
- -> [listit (protect P) [cons [listit CNT --> Terminal] (protect Parse)]]])
85
-
1
+ (define parse
2
+ D Sentence -> (let Parse (D [Sentence []])
3
+ (if (parsed? Parse) (output_parse Parse) ungrammatical)))
4
+
5
+ (define parsed?
6
+ [[] Output] -> true
7
+ _ -> false)
8
+
9
+ (define output_parse
10
+ [_ Output] -> Output)
11
+
12
+ (define generate_parser
13
+ Grammar -> (map (/. X (compile_rules X)) (group_rules (parenthesise_rules Grammar))))
14
+
15
+ (define parenthesise_rules
16
+ [S --> | Rest] -> (parenthesise_rules1 [S -->] Rest))
17
+
18
+ (define parenthesise_rules1
19
+ Rule [] -> [Rule]
20
+ Rule [S --> | Rest] -> [Rule | (parenthesise_rules1 [S -->] Rest)]
21
+ Rule [X | Y] -> (parenthesise_rules1 (append Rule [X]) Y))
22
+
23
+ (define group_rules
24
+ Rules -> (group_rules1 Rules []))
25
+
26
+ (define group_rules1
27
+ [] Groups -> Groups
28
+ [Rule | Rules] Groups -> (group_rules1 Rules (place_in_group Rule Groups)))
29
+
30
+ (define place_in_group
31
+ Rule [] -> [[Rule]]
32
+ Rule [Group | Groups] -> [[Rule | Group] | Groups]
33
+ where (belongs-in? Rule Group)
34
+ Rule [Group | Groups] -> [Group | (place_in_group Rule Groups)])
35
+
36
+ (define belongs-in?
37
+ [S | _] [[S | _] | _] -> true
38
+ _ _ -> false)
39
+
40
+ (define compile_rules
41
+ Rules -> (if (lex? Rules)
42
+ (generate_code_for_lex Rules)
43
+ (generate_code_for_nonlex Rules)))
44
+
45
+ (define lex?
46
+ [[S --> Terminal] | _] -> (string? Terminal)
47
+ _ -> false)
48
+
49
+ (define generate_code_for_nonlex
50
+ Rules -> (eval (append [define (get_characteristic_non_terminal Rules)
51
+ | (mapapp gcfn_help Rules)]
52
+ [(protect X) -> [fail]])))
53
+
54
+ (define mapapp
55
+ _ [] -> []
56
+ F [X | Y] -> (append (F X) (mapapp F Y)))
57
+
58
+ (define get_characteristic_non_terminal
59
+ [[CNT | _] | _] -> CNT)
60
+
61
+ (define gcfn_help
62
+ Rule -> [(protect Parameter)
63
+ <-
64
+ (apply_expansion Rule
65
+ [listit [head (protect Parameter)]
66
+ [cons [listit | Rule]
67
+ [head [tail (protect Parameter)]]]])])
68
+
69
+ (define apply_expansion
70
+ [CNT --> | Expansion] Parameter -> (ae_help Expansion Parameter))
71
+
72
+ (define ae_help
73
+ [] Code -> Code
74
+ [NT | Expansion] Code -> (ae_help Expansion [NT Code]))
75
+
76
+ (define generate_code_for_lex
77
+ Rules -> (eval (append [define (get_characteristic_non_terminal Rules)
78
+ (protect X) -> [fail] where [= (protect X) [fail]]
79
+ | (mapapp (function gcfl_help) Rules)]
80
+ [(protect X) -> [fail]])))
81
+
82
+ (define gcfl_help
83
+ [CNT --> Terminal] -> [[cons [cons Terminal (protect P)] [cons (protect Parse) []]]
84
+ -> [listit (protect P) [cons [listit CNT --> Terminal] (protect Parse)]]])
85
+
@@ -1,193 +1,193 @@
1
- \* <program> := <statement> <program> | <statement>;
2
- <statement> := <assignment> | <conditional> | <goto> | <tag>;
3
- <assignment> := (<var> := <val>) | (++ <var>); (-- <var>);
4
- <var> := any symbol;
5
- <val> := any number
6
- <conditional> := (if <test> <statement> <statement>);
7
- <test> := (<var> <comp> <var); (<test> and <test>);
8
- (<test> or <test>) | (not <test>);
9
- <comp> := > | < | =; *\
10
-
11
- (synonyms program (list statement)
12
- env (list (symbol * number)))
13
-
14
- (datatype statement
15
-
16
- Var : symbol; Val : val;
17
- =========================
18
- [Var := Val] : statement;
19
-
20
- if (element? Op [++ --])
21
- Var : symbol;
22
- =====================
23
- [Op Var] : statement;
24
-
25
- Test : test; DoThis : statement; DoThat : statement;
26
- ====================================================
27
- [if Test then DoThis else DoThat] : statement;
28
-
29
- Tag : symbol;
30
- ======================
31
- [goto Tag] : statement;
32
-
33
- Message : string-or-val;
34
- ============================
35
- [print Message] : statement;
36
-
37
- Message : string;
38
- _________________
39
- Message : string-or-val;
40
-
41
- Message : val;
42
- _________________
43
- Message : string-or-val;
44
-
45
- Var : symbol;
46
- =========================
47
- [input Var] : statement;
48
-
49
- Tag : symbol;
50
- _____________
51
- Tag : statement;)
52
-
53
- (datatype test
54
-
55
- if (element? Comp [= > <])
56
- Val1 : val; Val2: val;
57
- ======================
58
- [Val1 Comp Val2] : test;
59
-
60
-
61
- if (element? LogOp [and or])
62
- Test1 : test;
63
- Test2 : test;
64
- =============
65
- [Test1 LogOp Test2] : test;
66
-
67
-
68
- Test : test;
69
- ==================
70
- [not Test] : test;)
71
-
72
-
73
- (datatype val
74
-
75
-
76
- ______________________________________
77
- (number? N) : verified >> N : number;
78
-
79
-
80
- _______________________________________
81
- (symbol? S) : verified >> S : symbol;
82
-
83
-
84
- Val : symbol;
85
- _______________
86
- Val : val;
87
-
88
-
89
- Val : number;
90
- _____________
91
- Val : val;)
92
-
93
-
94
- \* The program that runs Minim programs is 56 lines of Qi and is given here. *\
95
-
96
-
97
- (define run
98
- {program --> env}
99
- Program -> (run-loop Program Program []))
100
-
101
-
102
- (define run-loop
103
- {program --> program --> env --> env}
104
- [] _ Env -> Env
105
- [nl | Ss] Program Env -> (do (output "~%") (run-loop Ss Program Env))
106
- [Tag | Ss] Program Env -> (run-loop Ss Program Env) where (symbol? Tag)
107
- [[goto Tag] | _] Program Env -> (run-loop (go Tag Program) Program Env)
108
- [[Var := Val] | Ss] Program Env
109
- -> (run-loop Ss Program (change-env Var (compute-val Val Env) Env))
110
- [[++ Var] | Ss] Program Env
111
- -> (run-loop Ss Program (change-env Var (+ 1 (look-up Var Env)) Env))
112
- [[-- Var] | Ss] Program Env
113
- -> (run-loop Ss Program (change-env Var (- (look-up Var Env) 1) Env))
114
- [[if Test then DoThis else DoThat] | Ss] Program Env
115
- -> (if (perform-test? Test Env)
116
- (run-loop [DoThis | Ss] Program Env)
117
- (run-loop [DoThat | Ss] Program Env))
118
- [[print M] | Ss] Program Env -> (do (output "~A" (look-up M Env))
119
- (run-loop Ss Program Env))
120
- where (symbol? M)
121
- [[print M] | Ss] Program Env -> (do (output "~A" M)
122
- (run-loop Ss Program Env))
123
- [[input Var] | Ss] Program Env
124
- -> (run-loop Ss Program (change-env Var (input+ : number) Env)) )
125
-
126
- (define compute-val
127
- {val --> env --> number}
128
- N _ -> N where (number? N)
129
- Var Env -> (look-up Var Env) where (symbol? Var))
130
-
131
- (define go
132
- {symbol --> program --> program}
133
- Tag [Tag | Program] -> Program
134
- Tag [_ | Program] -> (go Tag Program)
135
- Tag _ -> (error "cannot go to tag ~A~%" Tag))
136
-
137
- (define perform-test?
138
- {test --> env --> boolean}
139
- [Test1 and Test2] Env -> (and (perform-test? Test1 Env)
140
- (perform-test? Test2 Env))
141
- [Test1 or Test2] Env -> (or (perform-test? Test1 Env)
142
- (perform-test? Test2 Env))
143
- [not Test] Env -> (not (perform-test? Test Env))
144
- [V1 = V2] Env -> (= (compute-val V1 Env) (compute-val V2 Env))
145
- [V1 > V2] Env -> (> (compute-val V1 Env) (compute-val V2 Env))
146
- [V1 < V2] Env -> (< (compute-val V1 Env) (compute-val V2 Env)))
147
-
148
- (define change-env
149
- {symbol --> number --> env --> env}
150
- Var Val [] -> [(@p Var Val)]
151
- Var Val [(@p Var _) | Env] -> [(@p Var Val) | Env]
152
- Var Val [Binding | Env] -> [Binding | (change-env Var Val Env)])
153
-
154
- (define look-up
155
- {symbol --> env --> number}
156
- Var [] -> (error "~A is unbound.~%" Var)
157
- Var [(@p Var Val) | _] -> Val
158
- Var [_ | Env] -> (look-up Var Env))
159
-
160
- \* (run [ [print "Add x and y"]
161
- nl
162
- [print "Input x: "]
163
- [input x]
164
- nl
165
- [print "Input y: "]
166
- [input y]
167
- main
168
- [if [x = 0] then [goto end] else [goto sub1x]]
169
-
170
-
171
- sub1x
172
- [-- x]
173
- [++ y]
174
- [goto main]
175
-
176
-
177
- end
178
- nl
179
- [print "The total of x and y is "]
180
- [print y]
181
- nl] ) *\
182
-
183
-
184
-
185
-
186
-
187
-
188
-
189
-
190
-
191
-
192
-
1
+ \* <program> := <statement> <program> | <statement>;
2
+ <statement> := <assignment> | <conditional> | <goto> | <tag>;
3
+ <assignment> := (<var> := <val>) | (++ <var>); (-- <var>);
4
+ <var> := any symbol;
5
+ <val> := any number
6
+ <conditional> := (if <test> <statement> <statement>);
7
+ <test> := (<var> <comp> <var); (<test> and <test>);
8
+ (<test> or <test>) | (not <test>);
9
+ <comp> := > | < | =; *\
10
+
11
+ (synonyms program (list statement)
12
+ env (list (symbol * number)))
13
+
14
+ (datatype statement
15
+
16
+ Var : symbol; Val : val;
17
+ =========================
18
+ [Var := Val] : statement;
19
+
20
+ if (element? Op [++ --])
21
+ Var : symbol;
22
+ =====================
23
+ [Op Var] : statement;
24
+
25
+ Test : test; DoThis : statement; DoThat : statement;
26
+ ====================================================
27
+ [if Test then DoThis else DoThat] : statement;
28
+
29
+ Tag : symbol;
30
+ ======================
31
+ [goto Tag] : statement;
32
+
33
+ Message : string-or-val;
34
+ ============================
35
+ [print Message] : statement;
36
+
37
+ Message : string;
38
+ _________________
39
+ Message : string-or-val;
40
+
41
+ Message : val;
42
+ _________________
43
+ Message : string-or-val;
44
+
45
+ Var : symbol;
46
+ =========================
47
+ [input Var] : statement;
48
+
49
+ Tag : symbol;
50
+ _____________
51
+ Tag : statement;)
52
+
53
+ (datatype test
54
+
55
+ if (element? Comp [= > <])
56
+ Val1 : val; Val2: val;
57
+ ======================
58
+ [Val1 Comp Val2] : test;
59
+
60
+
61
+ if (element? LogOp [and or])
62
+ Test1 : test;
63
+ Test2 : test;
64
+ =============
65
+ [Test1 LogOp Test2] : test;
66
+
67
+
68
+ Test : test;
69
+ ==================
70
+ [not Test] : test;)
71
+
72
+
73
+ (datatype val
74
+
75
+
76
+ ______________________________________
77
+ (number? N) : verified >> N : number;
78
+
79
+
80
+ _______________________________________
81
+ (symbol? S) : verified >> S : symbol;
82
+
83
+
84
+ Val : symbol;
85
+ _______________
86
+ Val : val;
87
+
88
+
89
+ Val : number;
90
+ _____________
91
+ Val : val;)
92
+
93
+
94
+ \* The program that runs Minim programs is 56 lines of Qi and is given here. *\
95
+
96
+
97
+ (define run
98
+ {program --> env}
99
+ Program -> (run-loop Program Program []))
100
+
101
+
102
+ (define run-loop
103
+ {program --> program --> env --> env}
104
+ [] _ Env -> Env
105
+ [nl | Ss] Program Env -> (do (output "~%") (run-loop Ss Program Env))
106
+ [Tag | Ss] Program Env -> (run-loop Ss Program Env) where (symbol? Tag)
107
+ [[goto Tag] | _] Program Env -> (run-loop (go Tag Program) Program Env)
108
+ [[Var := Val] | Ss] Program Env
109
+ -> (run-loop Ss Program (change-env Var (compute-val Val Env) Env))
110
+ [[++ Var] | Ss] Program Env
111
+ -> (run-loop Ss Program (change-env Var (+ 1 (look-up Var Env)) Env))
112
+ [[-- Var] | Ss] Program Env
113
+ -> (run-loop Ss Program (change-env Var (- (look-up Var Env) 1) Env))
114
+ [[if Test then DoThis else DoThat] | Ss] Program Env
115
+ -> (if (perform-test? Test Env)
116
+ (run-loop [DoThis | Ss] Program Env)
117
+ (run-loop [DoThat | Ss] Program Env))
118
+ [[print M] | Ss] Program Env -> (do (output "~A" (look-up M Env))
119
+ (run-loop Ss Program Env))
120
+ where (symbol? M)
121
+ [[print M] | Ss] Program Env -> (do (output "~A" M)
122
+ (run-loop Ss Program Env))
123
+ [[input Var] | Ss] Program Env
124
+ -> (run-loop Ss Program (change-env Var (input+ : number) Env)) )
125
+
126
+ (define compute-val
127
+ {val --> env --> number}
128
+ N _ -> N where (number? N)
129
+ Var Env -> (look-up Var Env) where (symbol? Var))
130
+
131
+ (define go
132
+ {symbol --> program --> program}
133
+ Tag [Tag | Program] -> Program
134
+ Tag [_ | Program] -> (go Tag Program)
135
+ Tag _ -> (error "cannot go to tag ~A~%" Tag))
136
+
137
+ (define perform-test?
138
+ {test --> env --> boolean}
139
+ [Test1 and Test2] Env -> (and (perform-test? Test1 Env)
140
+ (perform-test? Test2 Env))
141
+ [Test1 or Test2] Env -> (or (perform-test? Test1 Env)
142
+ (perform-test? Test2 Env))
143
+ [not Test] Env -> (not (perform-test? Test Env))
144
+ [V1 = V2] Env -> (= (compute-val V1 Env) (compute-val V2 Env))
145
+ [V1 > V2] Env -> (> (compute-val V1 Env) (compute-val V2 Env))
146
+ [V1 < V2] Env -> (< (compute-val V1 Env) (compute-val V2 Env)))
147
+
148
+ (define change-env
149
+ {symbol --> number --> env --> env}
150
+ Var Val [] -> [(@p Var Val)]
151
+ Var Val [(@p Var _) | Env] -> [(@p Var Val) | Env]
152
+ Var Val [Binding | Env] -> [Binding | (change-env Var Val Env)])
153
+
154
+ (define look-up
155
+ {symbol --> env --> number}
156
+ Var [] -> (error "~A is unbound.~%" Var)
157
+ Var [(@p Var Val) | _] -> Val
158
+ Var [_ | Env] -> (look-up Var Env))
159
+
160
+ \* (run [ [print "Add x and y"]
161
+ nl
162
+ [print "Input x: "]
163
+ [input x]
164
+ nl
165
+ [print "Input y: "]
166
+ [input y]
167
+ main
168
+ [if [x = 0] then [goto end] else [goto sub1x]]
169
+
170
+
171
+ sub1x
172
+ [-- x]
173
+ [++ y]
174
+ [goto main]
175
+
176
+
177
+ end
178
+ nl
179
+ [print "The total of x and y is "]
180
+ [print y]
181
+ nl] ) *\
182
+
183
+
184
+
185
+
186
+
187
+
188
+
189
+
190
+
191
+
192
+
193
193