shen-ruby 0.10.0 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.rspec +1 -0
- data/.travis.yml +9 -3
- data/Gemfile +1 -4
- data/HISTORY.md +16 -0
- data/MIT_LICENSE.txt +1 -1
- data/README.md +25 -26
- data/Rakefile +3 -11
- data/bin/shen_test_suite.rb +15 -3
- data/bin/srrepl +6 -8
- data/lib/shen_ruby.rb +6 -1
- data/lib/shen_ruby/converters.rb +23 -0
- data/lib/shen_ruby/version.rb +1 -1
- data/shen-ruby.gemspec +4 -1
- data/shen/lib/shen_ruby/shen.rb +49 -33
- data/shen/release/benchmarks/N_queens.shen +45 -45
- data/shen/release/benchmarks/README.shen +14 -14
- data/shen/release/benchmarks/benchmarks.shen +52 -52
- data/shen/release/benchmarks/einstein.shen +32 -32
- data/shen/release/benchmarks/interpreter.shen +219 -219
- data/shen/release/benchmarks/jnk.shen +193 -193
- data/shen/release/benchmarks/powerset.shen +10 -10
- data/shen/release/benchmarks/prime.shen +10 -10
- data/shen/release/benchmarks/short.shen +129 -129
- data/shen/release/k_lambda/core.kl +181 -181
- data/shen/release/k_lambda/declarations.kl +131 -131
- data/shen/release/k_lambda/load.kl +84 -84
- data/shen/release/k_lambda/macros.kl +112 -112
- data/shen/release/k_lambda/prolog.kl +252 -252
- data/shen/release/k_lambda/reader.kl +222 -222
- data/shen/release/k_lambda/sequent.kl +166 -166
- data/shen/release/k_lambda/sys.kl +271 -271
- data/shen/release/k_lambda/t-star.kl +139 -139
- data/shen/release/k_lambda/toplevel.kl +135 -135
- data/shen/release/k_lambda/track.kl +103 -103
- data/shen/release/k_lambda/types.kl +324 -324
- data/shen/release/k_lambda/writer.kl +105 -105
- data/shen/release/k_lambda/yacc.kl +113 -113
- data/shen/release/test_programs/Chap13/problems.txt +26 -26
- data/shen/release/test_programs/README.shen +52 -52
- data/shen/release/test_programs/TinyLispFunctions.txt +15 -15
- data/shen/release/test_programs/TinyTypes.shen +55 -55
- data/shen/release/test_programs/binary.shen +24 -24
- data/shen/release/test_programs/bubble_version_1.shen +28 -28
- data/shen/release/test_programs/bubble_version_2.shen +22 -22
- data/shen/release/test_programs/calculator.shen +21 -21
- data/shen/release/test_programs/cartprod.shen +23 -23
- data/shen/release/test_programs/change.shen +25 -25
- data/shen/release/test_programs/classes-defaults.shen +94 -94
- data/shen/release/test_programs/classes-inheritance.shen +100 -100
- data/shen/release/test_programs/classes-typed.shen +74 -74
- data/shen/release/test_programs/classes-untyped.shen +46 -46
- data/shen/release/test_programs/depth_.shen +14 -14
- data/shen/release/test_programs/einstein.shen +34 -34
- data/shen/release/test_programs/fruit_machine.shen +46 -46
- data/shen/release/test_programs/interpreter.shen +217 -217
- data/shen/release/test_programs/metaprog.shen +85 -85
- data/shen/release/test_programs/minim.shen +192 -192
- data/shen/release/test_programs/mutual.shen +11 -11
- data/shen/release/test_programs/n_queens.shen +45 -45
- data/shen/release/test_programs/newton_version_1.shen +33 -33
- data/shen/release/test_programs/newton_version_2.shen +24 -24
- data/shen/release/test_programs/parse.prl +14 -14
- data/shen/release/test_programs/parser.shen +51 -51
- data/shen/release/test_programs/powerset.shen +10 -10
- data/shen/release/test_programs/prime.shen +10 -10
- data/shen/release/test_programs/prolog.shen +78 -78
- data/shen/release/test_programs/proof_assistant.shen +80 -80
- data/shen/release/test_programs/proplog_version_1.shen +25 -25
- data/shen/release/test_programs/proplog_version_2.shen +27 -27
- data/shen/release/test_programs/qmachine.shen +66 -66
- data/shen/release/test_programs/red-black.shen +54 -54
- data/shen/release/test_programs/search.shen +55 -55
- data/shen/release/test_programs/semantic_net.shen +44 -44
- data/shen/release/test_programs/spreadsheet.shen +34 -34
- data/shen/release/test_programs/stack.shen +27 -27
- data/shen/release/test_programs/streams.shen +20 -20
- data/shen/release/test_programs/strings.shen +57 -57
- data/shen/release/test_programs/structures-typed.shen +71 -71
- data/shen/release/test_programs/structures-untyped.shen +41 -41
- data/shen/release/test_programs/tests.shen +232 -232
- data/shen/release/test_programs/types.shen +11 -11
- data/shen/release/test_programs/whist.shen +239 -239
- data/shen/release/test_programs/yacc.shen +132 -132
- data/spec/shen_ruby/converters_spec.rb +48 -0
- data/spec/spec_helper.rb +1 -2
- metadata +55 -60
- data/k_lambda_spec/atom_spec.rb +0 -85
- data/k_lambda_spec/primitives/arithmetic_spec.rb +0 -175
- data/k_lambda_spec/primitives/assignments_spec.rb +0 -44
- data/k_lambda_spec/primitives/boolean_operations_spec.rb +0 -136
- data/k_lambda_spec/primitives/generic_functions_spec.rb +0 -120
- data/k_lambda_spec/primitives/lists_spec.rb +0 -40
- data/k_lambda_spec/primitives/strings_spec.rb +0 -77
- data/k_lambda_spec/primitives/symbols_spec.rb +0 -24
- data/k_lambda_spec/primitives/vectors_spec.rb +0 -92
- data/k_lambda_spec/spec_helper.rb +0 -29
- data/k_lambda_spec/support/shared_examples.rb +0 -124
- data/k_lambda_spec/tail_recursion_spec.rb +0 -30
- data/lib/kl.rb +0 -7
- data/lib/kl/absvector.rb +0 -12
- data/lib/kl/compiler.rb +0 -360
- data/lib/kl/cons.rb +0 -51
- data/lib/kl/empty_list.rb +0 -12
- data/lib/kl/environment.rb +0 -163
- data/lib/kl/error.rb +0 -4
- data/lib/kl/internal_error.rb +0 -7
- data/lib/kl/lexer.rb +0 -186
- data/lib/kl/primitives/arithmetic.rb +0 -60
- data/lib/kl/primitives/assignments.rb +0 -15
- data/lib/kl/primitives/booleans.rb +0 -21
- data/lib/kl/primitives/error_handling.rb +0 -13
- data/lib/kl/primitives/extensions.rb +0 -12
- data/lib/kl/primitives/generic_functions.rb +0 -29
- data/lib/kl/primitives/lists.rb +0 -23
- data/lib/kl/primitives/streams.rb +0 -28
- data/lib/kl/primitives/strings.rb +0 -63
- data/lib/kl/primitives/symbols.rb +0 -18
- data/lib/kl/primitives/time.rb +0 -17
- data/lib/kl/primitives/vectors.rb +0 -36
- data/lib/kl/reader.rb +0 -46
- data/spec/kl/cons_spec.rb +0 -12
- data/spec/kl/environment_spec.rb +0 -282
- data/spec/kl/interop_spec.rb +0 -68
- data/spec/kl/lexer_spec.rb +0 -149
- data/spec/kl/primitives/generic_functions_spec.rb +0 -29
- data/spec/kl/primitives/symbols_spec.rb +0 -21
- data/spec/kl/reader_spec.rb +0 -42
@@ -1,11 +1,11 @@
|
|
1
|
-
(define even?
|
2
|
-
1 -> false
|
3
|
-
X -> (odd? (- X 1)))
|
4
|
-
|
5
|
-
(define odd?
|
6
|
-
1 -> true
|
7
|
-
X -> (even? (- X 1)))
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
1
|
+
(define even?
|
2
|
+
1 -> false
|
3
|
+
X -> (odd? (- X 1)))
|
4
|
+
|
5
|
+
(define odd?
|
6
|
+
1 -> true
|
7
|
+
X -> (even? (- X 1)))
|
8
|
+
|
9
|
+
|
10
|
+
|
11
|
+
|
@@ -1,45 +1,45 @@
|
|
1
|
-
(define n-queens
|
2
|
-
{number --> (list (list number))}
|
3
|
-
N -> (n-queens-loop N (initialise N)))
|
4
|
-
|
5
|
-
(define initialise
|
6
|
-
{number --> (list number)}
|
7
|
-
0 -> []
|
8
|
-
N -> [1 | (initialise (- N 1))])
|
9
|
-
|
10
|
-
(define n-queens-loop
|
11
|
-
{number --> (list number) --> (list (list number))}
|
12
|
-
N Config -> [] where (all_Ns? N Config)
|
13
|
-
N Config -> [Config | (n-queens-loop N (next_n N Config))]
|
14
|
-
where (and (ok_row? Config) (ok_diag? Config))
|
15
|
-
N Config -> (n-queens-loop N (next_n N Config)))
|
16
|
-
|
17
|
-
(define all_Ns?
|
18
|
-
{number --> (list number) --> boolean}
|
19
|
-
_ [] -> true
|
20
|
-
N [N | Ns] -> (all_Ns? N Ns)
|
21
|
-
_ _ -> false)
|
22
|
-
|
23
|
-
(define next_n
|
24
|
-
{number --> (list number) --> (list number)}
|
25
|
-
N [N | Ns] -> [1 | (next_n N Ns)]
|
26
|
-
_ [N | Ns] -> [(+ 1 N) | Ns])
|
27
|
-
|
28
|
-
(define ok_row?
|
29
|
-
{(list number) --> boolean}
|
30
|
-
[] -> true
|
31
|
-
[N | Ns] -> false where (element? N Ns)
|
32
|
-
[_ | Ns] -> (ok_row? Ns))
|
33
|
-
|
34
|
-
(define ok_diag?
|
35
|
-
{(list number) --> boolean}
|
36
|
-
[] -> true
|
37
|
-
[N | Ns] -> (and (ok_diag_N? (+ N 1) (- N 1) Ns)
|
38
|
-
(ok_diag? Ns)))
|
39
|
-
|
40
|
-
(define ok_diag_N?
|
41
|
-
{number --> number --> (list number) --> boolean}
|
42
|
-
_ _ [] -> true
|
43
|
-
Up Down [Up | _] -> false
|
44
|
-
Up Down [Down | _] -> false
|
45
|
-
Up Down [_ | Ns] -> (ok_diag_N? (+ 1 Up) (- Down 1) Ns))
|
1
|
+
(define n-queens
|
2
|
+
{number --> (list (list number))}
|
3
|
+
N -> (n-queens-loop N (initialise N)))
|
4
|
+
|
5
|
+
(define initialise
|
6
|
+
{number --> (list number)}
|
7
|
+
0 -> []
|
8
|
+
N -> [1 | (initialise (- N 1))])
|
9
|
+
|
10
|
+
(define n-queens-loop
|
11
|
+
{number --> (list number) --> (list (list number))}
|
12
|
+
N Config -> [] where (all_Ns? N Config)
|
13
|
+
N Config -> [Config | (n-queens-loop N (next_n N Config))]
|
14
|
+
where (and (ok_row? Config) (ok_diag? Config))
|
15
|
+
N Config -> (n-queens-loop N (next_n N Config)))
|
16
|
+
|
17
|
+
(define all_Ns?
|
18
|
+
{number --> (list number) --> boolean}
|
19
|
+
_ [] -> true
|
20
|
+
N [N | Ns] -> (all_Ns? N Ns)
|
21
|
+
_ _ -> false)
|
22
|
+
|
23
|
+
(define next_n
|
24
|
+
{number --> (list number) --> (list number)}
|
25
|
+
N [N | Ns] -> [1 | (next_n N Ns)]
|
26
|
+
_ [N | Ns] -> [(+ 1 N) | Ns])
|
27
|
+
|
28
|
+
(define ok_row?
|
29
|
+
{(list number) --> boolean}
|
30
|
+
[] -> true
|
31
|
+
[N | Ns] -> false where (element? N Ns)
|
32
|
+
[_ | Ns] -> (ok_row? Ns))
|
33
|
+
|
34
|
+
(define ok_diag?
|
35
|
+
{(list number) --> boolean}
|
36
|
+
[] -> true
|
37
|
+
[N | Ns] -> (and (ok_diag_N? (+ N 1) (- N 1) Ns)
|
38
|
+
(ok_diag? Ns)))
|
39
|
+
|
40
|
+
(define ok_diag_N?
|
41
|
+
{number --> number --> (list number) --> boolean}
|
42
|
+
_ _ [] -> true
|
43
|
+
Up Down [Up | _] -> false
|
44
|
+
Up Down [Down | _] -> false
|
45
|
+
Up Down [_ | Ns] -> (ok_diag_N? (+ 1 Up) (- Down 1) Ns))
|
@@ -1,33 +1,33 @@
|
|
1
|
-
(define newtons-method
|
2
|
-
N -> (let Guess (/ N 2.0)
|
3
|
-
(run-newtons-method
|
4
|
-
N
|
5
|
-
(round-to-2-places (average Guess (/ N Guess)))
|
6
|
-
Guess)))
|
7
|
-
|
8
|
-
(define run-newtons-method
|
9
|
-
_ Sqrt Sqrt -> Sqrt
|
10
|
-
N Better_Guess _
|
11
|
-
-> (run-newtons-method
|
12
|
-
N
|
13
|
-
(round-to-2-places (average Better_Guess (/ N Better_Guess)))
|
14
|
-
Better_Guess))
|
15
|
-
|
16
|
-
(define round-to-2-places
|
17
|
-
N -> (/ (round (* 100.0 N)) 100.0))
|
18
|
-
|
19
|
-
(define average
|
20
|
-
M N -> (/ (+ M N) 2.0))
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
1
|
+
(define newtons-method
|
2
|
+
N -> (let Guess (/ N 2.0)
|
3
|
+
(run-newtons-method
|
4
|
+
N
|
5
|
+
(round-to-2-places (average Guess (/ N Guess)))
|
6
|
+
Guess)))
|
7
|
+
|
8
|
+
(define run-newtons-method
|
9
|
+
_ Sqrt Sqrt -> Sqrt
|
10
|
+
N Better_Guess _
|
11
|
+
-> (run-newtons-method
|
12
|
+
N
|
13
|
+
(round-to-2-places (average Better_Guess (/ N Better_Guess)))
|
14
|
+
Better_Guess))
|
15
|
+
|
16
|
+
(define round-to-2-places
|
17
|
+
N -> (/ (round (* 100.0 N)) 100.0))
|
18
|
+
|
19
|
+
(define average
|
20
|
+
M N -> (/ (+ M N) 2.0))
|
21
|
+
|
22
|
+
|
23
|
+
|
24
|
+
|
25
|
+
|
26
|
+
|
27
|
+
|
28
|
+
|
29
|
+
|
30
|
+
|
31
|
+
|
32
|
+
|
33
|
+
|
@@ -1,24 +1,24 @@
|
|
1
|
-
(define newtons-method
|
2
|
-
N -> (fix (/. M (specialised-run-newtons-method N M)) (/ N 2.0)))
|
3
|
-
|
4
|
-
(define specialised-run-newtons-method
|
5
|
-
M N -> (round-to-2-places (average N (/ M N))))
|
6
|
-
|
7
|
-
(define round-to-2-places
|
8
|
-
M -> (/ (round (* 100.0 M)) 100.0))
|
9
|
-
|
10
|
-
(define average
|
11
|
-
M N -> (/ (+ M N) 2.0))
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
1
|
+
(define newtons-method
|
2
|
+
N -> (fix (/. M (specialised-run-newtons-method N M)) (/ N 2.0)))
|
3
|
+
|
4
|
+
(define specialised-run-newtons-method
|
5
|
+
M N -> (round-to-2-places (average N (/ M N))))
|
6
|
+
|
7
|
+
(define round-to-2-places
|
8
|
+
M -> (/ (round (* 100.0 M)) 100.0))
|
9
|
+
|
10
|
+
(define average
|
11
|
+
M N -> (/ (+ M N) 2.0))
|
12
|
+
|
13
|
+
|
14
|
+
|
15
|
+
|
16
|
+
|
17
|
+
|
18
|
+
|
19
|
+
|
20
|
+
|
21
|
+
|
22
|
+
|
23
|
+
|
24
|
+
|
@@ -1,14 +1,14 @@
|
|
1
|
-
(defprolog pparse
|
2
|
-
S Grammar <-- (parsing [[s + 0] = [S + 0]] Grammar);)
|
3
|
-
|
4
|
-
(defprolog parsing
|
5
|
-
[X = X] _ <--;
|
6
|
-
[[X + Y] = [X + Z]] Grammar <-- ! (parsing [Y = Z] Grammar);
|
7
|
-
[[[X + Y] + Z] = W] Grammar <-- ! (parsing [[X + [Y + Z]] = W] Grammar);
|
8
|
-
[W = [[X + Y] + Z]] Grammar <-- ! (parsing [W = [X + [Y + Z]]] Grammar);
|
9
|
-
[[X + Y] = Z] Grammar <-- (member [X = W] Grammar) (parsing [[W + Y] = Z] Grammar);)
|
10
|
-
|
11
|
-
(defprolog member
|
12
|
-
X [X | _] <--;
|
13
|
-
X [_ | Y] <-- (member X Y);)
|
14
|
-
|
1
|
+
(defprolog pparse
|
2
|
+
S Grammar <-- (parsing [[s + 0] = [S + 0]] Grammar);)
|
3
|
+
|
4
|
+
(defprolog parsing
|
5
|
+
[X = X] _ <--;
|
6
|
+
[[X + Y] = [X + Z]] Grammar <-- ! (parsing [Y = Z] Grammar);
|
7
|
+
[[[X + Y] + Z] = W] Grammar <-- ! (parsing [[X + [Y + Z]] = W] Grammar);
|
8
|
+
[W = [[X + Y] + Z]] Grammar <-- ! (parsing [W = [X + [Y + Z]]] Grammar);
|
9
|
+
[[X + Y] = Z] Grammar <-- (member [X = W] Grammar) (parsing [[W + Y] = Z] Grammar);)
|
10
|
+
|
11
|
+
(defprolog member
|
12
|
+
X [X | _] <--;
|
13
|
+
X [_ | Y] <-- (member X Y);)
|
14
|
+
|
@@ -1,52 +1,52 @@
|
|
1
|
-
(define parse
|
2
|
-
Sentence -> (let Parse (sent [Sentence []])
|
3
|
-
(if (parsed? Parse)
|
4
|
-
(output_parse Parse)
|
5
|
-
ungrammatical)))
|
6
|
-
|
7
|
-
(define parsed?
|
8
|
-
[[] _] -> true
|
9
|
-
_ -> false)
|
10
|
-
|
11
|
-
(define output_parse
|
12
|
-
[_ Parse_Rules] -> (reverse Parse_Rules))
|
13
|
-
|
14
|
-
(define sent
|
15
|
-
[Input Output] <- (vp (np [Input [[sent --> np vp] | Output]]))
|
16
|
-
_ -> (fail))
|
17
|
-
|
18
|
-
(define np
|
19
|
-
[Input Output] <- (n (det [Input [[np --> det n] | Output]]))
|
20
|
-
[Input Output] <- (name [Input [[np --> name] | Output]])
|
21
|
-
_ -> (fail))
|
22
|
-
|
23
|
-
(define name
|
24
|
-
[["John" | Input] Output] -> [Input [[name --> "John"] | Output]]
|
25
|
-
[["Bill" | Input] Output] -> [Input [[name --> "Bill"] | Output]]
|
26
|
-
_ -> (fail))
|
27
|
-
|
28
|
-
(define det
|
29
|
-
[["the" | Input] Output] -> [Input [[det --> "the"] | Output]]
|
30
|
-
[["a" | Input] Output] -> [Input [[det --> "a"] | Output]]
|
31
|
-
[["that" | Input] Output] -> [Input [[det --> "that"] | Output]]
|
32
|
-
[["this" | Input] Output] -> [Input [[det --> "this"] | Output]]
|
33
|
-
_ -> (fail))
|
34
|
-
|
35
|
-
(define n
|
36
|
-
[["boy" | Input] Output] -> [Input [[n --> "boy"] | Output]]
|
37
|
-
[["girl" | Input] Output] -> [Input [[n --> "girl"] | Output]]
|
38
|
-
_ -> (fail))
|
39
|
-
|
40
|
-
(define vp
|
41
|
-
[Input Output] <- (np (vtrans [Input [[vp --> vtrans np] | Output]]))
|
42
|
-
[Input Output] <- (vp [Input [[vp --> vintrans] | Output]])
|
43
|
-
_ -> (fail))
|
44
|
-
|
45
|
-
(define vtrans
|
46
|
-
[["kicks" | Input] Output] -> [Input [[vtrans --> "kicks"] | Output]]
|
47
|
-
[["likes" | Input] Output] -> [Input [[vtrans --> "likes"] | Output]]
|
48
|
-
_ -> (fail))
|
49
|
-
|
50
|
-
(define vintrans
|
51
|
-
[["jumps" | Input] Output] -> [Input [[vintrans --> "jumps"] | Output]]
|
1
|
+
(define parse
|
2
|
+
Sentence -> (let Parse (sent [Sentence []])
|
3
|
+
(if (parsed? Parse)
|
4
|
+
(output_parse Parse)
|
5
|
+
ungrammatical)))
|
6
|
+
|
7
|
+
(define parsed?
|
8
|
+
[[] _] -> true
|
9
|
+
_ -> false)
|
10
|
+
|
11
|
+
(define output_parse
|
12
|
+
[_ Parse_Rules] -> (reverse Parse_Rules))
|
13
|
+
|
14
|
+
(define sent
|
15
|
+
[Input Output] <- (vp (np [Input [[sent --> np vp] | Output]]))
|
16
|
+
_ -> (fail))
|
17
|
+
|
18
|
+
(define np
|
19
|
+
[Input Output] <- (n (det [Input [[np --> det n] | Output]]))
|
20
|
+
[Input Output] <- (name [Input [[np --> name] | Output]])
|
21
|
+
_ -> (fail))
|
22
|
+
|
23
|
+
(define name
|
24
|
+
[["John" | Input] Output] -> [Input [[name --> "John"] | Output]]
|
25
|
+
[["Bill" | Input] Output] -> [Input [[name --> "Bill"] | Output]]
|
26
|
+
_ -> (fail))
|
27
|
+
|
28
|
+
(define det
|
29
|
+
[["the" | Input] Output] -> [Input [[det --> "the"] | Output]]
|
30
|
+
[["a" | Input] Output] -> [Input [[det --> "a"] | Output]]
|
31
|
+
[["that" | Input] Output] -> [Input [[det --> "that"] | Output]]
|
32
|
+
[["this" | Input] Output] -> [Input [[det --> "this"] | Output]]
|
33
|
+
_ -> (fail))
|
34
|
+
|
35
|
+
(define n
|
36
|
+
[["boy" | Input] Output] -> [Input [[n --> "boy"] | Output]]
|
37
|
+
[["girl" | Input] Output] -> [Input [[n --> "girl"] | Output]]
|
38
|
+
_ -> (fail))
|
39
|
+
|
40
|
+
(define vp
|
41
|
+
[Input Output] <- (np (vtrans [Input [[vp --> vtrans np] | Output]]))
|
42
|
+
[Input Output] <- (vp [Input [[vp --> vintrans] | Output]])
|
43
|
+
_ -> (fail))
|
44
|
+
|
45
|
+
(define vtrans
|
46
|
+
[["kicks" | Input] Output] -> [Input [[vtrans --> "kicks"] | Output]]
|
47
|
+
[["likes" | Input] Output] -> [Input [[vtrans --> "likes"] | Output]]
|
48
|
+
_ -> (fail))
|
49
|
+
|
50
|
+
(define vintrans
|
51
|
+
[["jumps" | Input] Output] -> [Input [[vintrans --> "jumps"] | Output]]
|
52
52
|
_ -> (fail))
|
@@ -1,10 +1,10 @@
|
|
1
|
-
(define powerset
|
2
|
-
[] -> [[]]
|
3
|
-
[X | Y] -> (let Powerset (powerset Y)
|
4
|
-
(append (cons-X-to-each-set X Powerset) Powerset)))
|
5
|
-
|
6
|
-
(define cons-X-to-each-set
|
7
|
-
_ [ ] -> [ ]
|
8
|
-
X [Y | Z] -> [[X | Y] | (cons-X-to-each-set X Z)])
|
9
|
-
|
10
|
-
|
1
|
+
(define powerset
|
2
|
+
[] -> [[]]
|
3
|
+
[X | Y] -> (let Powerset (powerset Y)
|
4
|
+
(append (cons-X-to-each-set X Powerset) Powerset)))
|
5
|
+
|
6
|
+
(define cons-X-to-each-set
|
7
|
+
_ [ ] -> [ ]
|
8
|
+
X [Y | Z] -> [[X | Y] | (cons-X-to-each-set X Z)])
|
9
|
+
|
10
|
+
|
@@ -1,10 +1,10 @@
|
|
1
|
-
(define prime?
|
2
|
-
X -> (prime* X (/ X 2) 2))
|
3
|
-
|
4
|
-
(define prime*
|
5
|
-
X Max Div -> false where (integer? (/ X Div))
|
6
|
-
X Max Div -> true where (> Div Max)
|
7
|
-
X Max Div -> (prime* X Max (+ 1 Div)))
|
8
|
-
|
9
|
-
|
10
|
-
|
1
|
+
(define prime?
|
2
|
+
X -> (prime* X (/ X 2) 2))
|
3
|
+
|
4
|
+
(define prime*
|
5
|
+
X Max Div -> false where (integer? (/ X Div))
|
6
|
+
X Max Div -> true where (> Div Max)
|
7
|
+
X Max Div -> (prime* X Max (+ 1 Div)))
|
8
|
+
|
9
|
+
|
10
|
+
|
@@ -1,79 +1,79 @@
|
|
1
|
-
(defprolog f
|
2
|
-
a <--;)
|
3
|
-
|
4
|
-
(defprolog g
|
5
|
-
a <-- ! (f b);
|
6
|
-
X <-- (f a);)
|
7
|
-
|
8
|
-
(defprolog mem
|
9
|
-
X [X | _] <--;
|
10
|
-
X [Y | Z] <-- (mem X Z);)
|
11
|
-
|
12
|
-
(defprolog app
|
13
|
-
[] X X <--;
|
14
|
-
[X | Y] W [X | Z] <-- (app Y W Z);)
|
15
|
-
|
16
|
-
(defprolog rev
|
17
|
-
[] [] <--;
|
18
|
-
[X | Y] Z <-- (rev Y W) (app W [X] Z);)
|
19
|
-
|
20
|
-
(defprolog enjoys
|
21
|
-
willi X <-- (likes mark X);
|
22
|
-
mark chocolate <--;
|
23
|
-
mark tea <--;) enjoys
|
24
|
-
|
25
|
-
(defprolog fads
|
26
|
-
X <-- (findall Y [enjoys X Y] Friends) (return Friends);) fads
|
27
|
-
|
28
|
-
(defprolog prop
|
29
|
-
A C <-- (proph [[~ C] | A]);) prop
|
30
|
-
|
31
|
-
(defprolog proph
|
32
|
-
A <-- (mem [~ P] A) (mem P A) !;
|
33
|
-
A <-- (consistent A) ! (when false);
|
34
|
-
(mode [[P & Q] | A] -) <-- ! (proph [P Q | A]);
|
35
|
-
(mode [[P <=> Q] | A] -) <-- ! (proph [[P => Q] [Q => P] | A]);
|
36
|
-
(mode [[P => Q] | A] -) <-- ! (proph [[[~ P] v Q] | A]);
|
37
|
-
(mode [[~ [P v Q]] | A] -) <-- ! (proph [[~ P] [~ Q] | A]);
|
38
|
-
(mode [[~ [P & Q]] | A] -) <-- ! (proph [[[~ P] v [~ Q]] | A]);
|
39
|
-
(mode [[~ [P => Q]] | A] -) <-- ! (proph [P [~ Q] | A]);
|
40
|
-
(mode [[~ [P <=> Q]] | A] -) <-- ! (proph [[~ [[P => Q] v [~ [Q => P]]]] | A]);
|
41
|
-
(mode [[P & Q] | A] -) <-- ! (proph [P Q | A]);
|
42
|
-
(mode [[P v Q] | A] -) <-- ! (proph [P | A]) ! (proph [Q | A]);
|
43
|
-
(mode [P | Ps] -) <-- (app Ps [P] Qs) ! (proph Qs);)
|
44
|
-
|
45
|
-
(defprolog consistent
|
46
|
-
[] <--;
|
47
|
-
[P | Ps] <-- (when (symbol? P)) ! (consistent Ps);
|
48
|
-
[[~ P] | Ps] <-- (when (symbol? P)) ! (consistent Ps);)
|
49
|
-
|
50
|
-
(defprolog app
|
51
|
-
[] X X <--;
|
52
|
-
(mode [X | Y] -) W [X | Z] <-- (app Y W Z);)
|
53
|
-
|
54
|
-
(defprolog mem
|
55
|
-
X (mode [X | _] -) <--;
|
56
|
-
X (mode [_ | Y] -) <-- (mem X Y);)
|
57
|
-
|
58
|
-
(defprolog mapit
|
59
|
-
_ [] [] <--;
|
60
|
-
Pred [X | Y] [W | Z] <-- (call [Pred X W]) (mapit Pred Y Z);)
|
61
|
-
|
62
|
-
(defprolog consit
|
63
|
-
X [1 X] <--;)
|
64
|
-
|
65
|
-
(defprolog different
|
66
|
-
X Y <-- (~ [identical X Y]);)
|
67
|
-
|
68
|
-
(defprolog ~
|
69
|
-
P <-- (call P) ! (when false);
|
70
|
-
_ <--;)
|
71
|
-
|
72
|
-
(defprolog likes
|
73
|
-
john X <-- (tall X) (pretty X);)
|
74
|
-
|
75
|
-
(defprolog tall
|
76
|
-
mary <--;)
|
77
|
-
|
78
|
-
(defprolog pretty
|
1
|
+
(defprolog f
|
2
|
+
a <--;)
|
3
|
+
|
4
|
+
(defprolog g
|
5
|
+
a <-- ! (f b);
|
6
|
+
X <-- (f a);)
|
7
|
+
|
8
|
+
(defprolog mem
|
9
|
+
X [X | _] <--;
|
10
|
+
X [Y | Z] <-- (mem X Z);)
|
11
|
+
|
12
|
+
(defprolog app
|
13
|
+
[] X X <--;
|
14
|
+
[X | Y] W [X | Z] <-- (app Y W Z);)
|
15
|
+
|
16
|
+
(defprolog rev
|
17
|
+
[] [] <--;
|
18
|
+
[X | Y] Z <-- (rev Y W) (app W [X] Z);)
|
19
|
+
|
20
|
+
(defprolog enjoys
|
21
|
+
willi X <-- (likes mark X);
|
22
|
+
mark chocolate <--;
|
23
|
+
mark tea <--;) enjoys
|
24
|
+
|
25
|
+
(defprolog fads
|
26
|
+
X <-- (findall Y [enjoys X Y] Friends) (return Friends);) fads
|
27
|
+
|
28
|
+
(defprolog prop
|
29
|
+
A C <-- (proph [[~ C] | A]);) prop
|
30
|
+
|
31
|
+
(defprolog proph
|
32
|
+
A <-- (mem [~ P] A) (mem P A) !;
|
33
|
+
A <-- (consistent A) ! (when false);
|
34
|
+
(mode [[P & Q] | A] -) <-- ! (proph [P Q | A]);
|
35
|
+
(mode [[P <=> Q] | A] -) <-- ! (proph [[P => Q] [Q => P] | A]);
|
36
|
+
(mode [[P => Q] | A] -) <-- ! (proph [[[~ P] v Q] | A]);
|
37
|
+
(mode [[~ [P v Q]] | A] -) <-- ! (proph [[~ P] [~ Q] | A]);
|
38
|
+
(mode [[~ [P & Q]] | A] -) <-- ! (proph [[[~ P] v [~ Q]] | A]);
|
39
|
+
(mode [[~ [P => Q]] | A] -) <-- ! (proph [P [~ Q] | A]);
|
40
|
+
(mode [[~ [P <=> Q]] | A] -) <-- ! (proph [[~ [[P => Q] v [~ [Q => P]]]] | A]);
|
41
|
+
(mode [[P & Q] | A] -) <-- ! (proph [P Q | A]);
|
42
|
+
(mode [[P v Q] | A] -) <-- ! (proph [P | A]) ! (proph [Q | A]);
|
43
|
+
(mode [P | Ps] -) <-- (app Ps [P] Qs) ! (proph Qs);)
|
44
|
+
|
45
|
+
(defprolog consistent
|
46
|
+
[] <--;
|
47
|
+
[P | Ps] <-- (when (symbol? P)) ! (consistent Ps);
|
48
|
+
[[~ P] | Ps] <-- (when (symbol? P)) ! (consistent Ps);)
|
49
|
+
|
50
|
+
(defprolog app
|
51
|
+
[] X X <--;
|
52
|
+
(mode [X | Y] -) W [X | Z] <-- (app Y W Z);)
|
53
|
+
|
54
|
+
(defprolog mem
|
55
|
+
X (mode [X | _] -) <--;
|
56
|
+
X (mode [_ | Y] -) <-- (mem X Y);)
|
57
|
+
|
58
|
+
(defprolog mapit
|
59
|
+
_ [] [] <--;
|
60
|
+
Pred [X | Y] [W | Z] <-- (call [Pred X W]) (mapit Pred Y Z);)
|
61
|
+
|
62
|
+
(defprolog consit
|
63
|
+
X [1 X] <--;)
|
64
|
+
|
65
|
+
(defprolog different
|
66
|
+
X Y <-- (~ [identical X Y]);)
|
67
|
+
|
68
|
+
(defprolog ~
|
69
|
+
P <-- (call P) ! (when false);
|
70
|
+
_ <--;)
|
71
|
+
|
72
|
+
(defprolog likes
|
73
|
+
john X <-- (tall X) (pretty X);)
|
74
|
+
|
75
|
+
(defprolog tall
|
76
|
+
mary <--;)
|
77
|
+
|
78
|
+
(defprolog pretty
|
79
79
|
mary <--;)
|