Repository navigation
Expand file tree
/
Copy paththesis-tables.mar
More file actions
74 lines (69 loc) · 2.63 KB
/
Copy paththesis-tables.mar
File metadata and controls
74 lines (69 loc) · 2.63 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
import thesis-examples.mar
struct LatexTerm { term: Term }
fun latex(term: Term): LatexTerm { LatexTerm { term } }
fun write[W](writer: W, term: LatexTerm) {
| writer."no"
| return {}
switch term.term
case number(num) writer."{num}"
case add(op) writer."{op.left.latex()} + {op.right.latex()}"
case subtract(op)
writer."{op.left.latex()} - {{
var needs_parens = op.right.* is add or {op.right.* is subtract}
if needs_parens then "({op.right.latex()})" else "{op.right.latex()}"
}}"
case multiply(op)
writer."{{
var needs_parens = op.left.* is add or {op.left.* is subtract}
if needs_parens then "({op.left.latex()})" else "{op.left.latex()}"
}} \\cdot {{
var needs_parens = op.right.* is add or {op.right.* is subtract}
if needs_parens then "({op.right.latex()})" else "{op.right.latex()}"
}}"
case divide(op)
writer."{{
var needs_parens = op.left.* is add or {op.left.* is subtract}
if needs_parens then "({op.left.latex()})" else "{op.left.latex()}"
}} / {{
var needs_parens = not(op.right.* is number)
if needs_parens then "({op.right.latex()})" else "{op.right.latex()}"
}}"
}
fun print_generate_table() {
println("Generate table:")
var random = random_number_generator()
for complexity in list(0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 200, 300, 400, 500) do {
var term = static[Term]().generate(random.&, complexity)
print("{complexity} & ${term.latex()}$ \\\\ \\hline \n")
| print("{complexity} & ${term.latex()}$ & {switch try term.eval() case ok(num) "${num}$" case error "-"} \\\\ \\hline \n")
}
}
fun ops(left: Term, right: Term): Operands {
Operands { left = left.put_on_heap(), right = right.put_on_heap() }
}
fun print_mutate_table() {
| -2 * 4 * -9 * -5 / (-6 * -2 * -9 / -5)
var term = Term.divide(ops(
Term.multiply(ops(
Term.multiply(ops(Term.number(0-2), Term.number(4))),
Term.multiply(ops(Term.number(0-9), Term.number(0-5))),
)),
Term.multiply(ops(
Term.multiply(ops(Term.number(0-6), Term.number(0-2))),
Term.divide(ops(Term.number(0-9), Term.number(0-5))),
))
))
println("Original term: {term}")
println("Mutate table:")
var random = random_number_generator()
for temperature in list(0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 200, 300, 400, 500) do {
var term = term.mutate(random.&, temperature)
print("{temperature} & ${term.latex()}$ \\\\ \\hline \n")
| print("{temperature} & ${term.latex()}$ & {switch try term.eval() case ok(num) "${num}$" case error "-"} \\\\ \\hline \n")
}
}
fun main() {
print_generate_table()
println()
print_mutate_table()
}