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.
Files changed (128) hide show
  1. checksums.yaml +4 -4
  2. data/.rspec +1 -0
  3. data/.travis.yml +9 -3
  4. data/Gemfile +1 -4
  5. data/HISTORY.md +16 -0
  6. data/MIT_LICENSE.txt +1 -1
  7. data/README.md +25 -26
  8. data/Rakefile +3 -11
  9. data/bin/shen_test_suite.rb +15 -3
  10. data/bin/srrepl +6 -8
  11. data/lib/shen_ruby.rb +6 -1
  12. data/lib/shen_ruby/converters.rb +23 -0
  13. data/lib/shen_ruby/version.rb +1 -1
  14. data/shen-ruby.gemspec +4 -1
  15. data/shen/lib/shen_ruby/shen.rb +49 -33
  16. data/shen/release/benchmarks/N_queens.shen +45 -45
  17. data/shen/release/benchmarks/README.shen +14 -14
  18. data/shen/release/benchmarks/benchmarks.shen +52 -52
  19. data/shen/release/benchmarks/einstein.shen +32 -32
  20. data/shen/release/benchmarks/interpreter.shen +219 -219
  21. data/shen/release/benchmarks/jnk.shen +193 -193
  22. data/shen/release/benchmarks/powerset.shen +10 -10
  23. data/shen/release/benchmarks/prime.shen +10 -10
  24. data/shen/release/benchmarks/short.shen +129 -129
  25. data/shen/release/k_lambda/core.kl +181 -181
  26. data/shen/release/k_lambda/declarations.kl +131 -131
  27. data/shen/release/k_lambda/load.kl +84 -84
  28. data/shen/release/k_lambda/macros.kl +112 -112
  29. data/shen/release/k_lambda/prolog.kl +252 -252
  30. data/shen/release/k_lambda/reader.kl +222 -222
  31. data/shen/release/k_lambda/sequent.kl +166 -166
  32. data/shen/release/k_lambda/sys.kl +271 -271
  33. data/shen/release/k_lambda/t-star.kl +139 -139
  34. data/shen/release/k_lambda/toplevel.kl +135 -135
  35. data/shen/release/k_lambda/track.kl +103 -103
  36. data/shen/release/k_lambda/types.kl +324 -324
  37. data/shen/release/k_lambda/writer.kl +105 -105
  38. data/shen/release/k_lambda/yacc.kl +113 -113
  39. data/shen/release/test_programs/Chap13/problems.txt +26 -26
  40. data/shen/release/test_programs/README.shen +52 -52
  41. data/shen/release/test_programs/TinyLispFunctions.txt +15 -15
  42. data/shen/release/test_programs/TinyTypes.shen +55 -55
  43. data/shen/release/test_programs/binary.shen +24 -24
  44. data/shen/release/test_programs/bubble_version_1.shen +28 -28
  45. data/shen/release/test_programs/bubble_version_2.shen +22 -22
  46. data/shen/release/test_programs/calculator.shen +21 -21
  47. data/shen/release/test_programs/cartprod.shen +23 -23
  48. data/shen/release/test_programs/change.shen +25 -25
  49. data/shen/release/test_programs/classes-defaults.shen +94 -94
  50. data/shen/release/test_programs/classes-inheritance.shen +100 -100
  51. data/shen/release/test_programs/classes-typed.shen +74 -74
  52. data/shen/release/test_programs/classes-untyped.shen +46 -46
  53. data/shen/release/test_programs/depth_.shen +14 -14
  54. data/shen/release/test_programs/einstein.shen +34 -34
  55. data/shen/release/test_programs/fruit_machine.shen +46 -46
  56. data/shen/release/test_programs/interpreter.shen +217 -217
  57. data/shen/release/test_programs/metaprog.shen +85 -85
  58. data/shen/release/test_programs/minim.shen +192 -192
  59. data/shen/release/test_programs/mutual.shen +11 -11
  60. data/shen/release/test_programs/n_queens.shen +45 -45
  61. data/shen/release/test_programs/newton_version_1.shen +33 -33
  62. data/shen/release/test_programs/newton_version_2.shen +24 -24
  63. data/shen/release/test_programs/parse.prl +14 -14
  64. data/shen/release/test_programs/parser.shen +51 -51
  65. data/shen/release/test_programs/powerset.shen +10 -10
  66. data/shen/release/test_programs/prime.shen +10 -10
  67. data/shen/release/test_programs/prolog.shen +78 -78
  68. data/shen/release/test_programs/proof_assistant.shen +80 -80
  69. data/shen/release/test_programs/proplog_version_1.shen +25 -25
  70. data/shen/release/test_programs/proplog_version_2.shen +27 -27
  71. data/shen/release/test_programs/qmachine.shen +66 -66
  72. data/shen/release/test_programs/red-black.shen +54 -54
  73. data/shen/release/test_programs/search.shen +55 -55
  74. data/shen/release/test_programs/semantic_net.shen +44 -44
  75. data/shen/release/test_programs/spreadsheet.shen +34 -34
  76. data/shen/release/test_programs/stack.shen +27 -27
  77. data/shen/release/test_programs/streams.shen +20 -20
  78. data/shen/release/test_programs/strings.shen +57 -57
  79. data/shen/release/test_programs/structures-typed.shen +71 -71
  80. data/shen/release/test_programs/structures-untyped.shen +41 -41
  81. data/shen/release/test_programs/tests.shen +232 -232
  82. data/shen/release/test_programs/types.shen +11 -11
  83. data/shen/release/test_programs/whist.shen +239 -239
  84. data/shen/release/test_programs/yacc.shen +132 -132
  85. data/spec/shen_ruby/converters_spec.rb +48 -0
  86. data/spec/spec_helper.rb +1 -2
  87. metadata +55 -60
  88. data/k_lambda_spec/atom_spec.rb +0 -85
  89. data/k_lambda_spec/primitives/arithmetic_spec.rb +0 -175
  90. data/k_lambda_spec/primitives/assignments_spec.rb +0 -44
  91. data/k_lambda_spec/primitives/boolean_operations_spec.rb +0 -136
  92. data/k_lambda_spec/primitives/generic_functions_spec.rb +0 -120
  93. data/k_lambda_spec/primitives/lists_spec.rb +0 -40
  94. data/k_lambda_spec/primitives/strings_spec.rb +0 -77
  95. data/k_lambda_spec/primitives/symbols_spec.rb +0 -24
  96. data/k_lambda_spec/primitives/vectors_spec.rb +0 -92
  97. data/k_lambda_spec/spec_helper.rb +0 -29
  98. data/k_lambda_spec/support/shared_examples.rb +0 -124
  99. data/k_lambda_spec/tail_recursion_spec.rb +0 -30
  100. data/lib/kl.rb +0 -7
  101. data/lib/kl/absvector.rb +0 -12
  102. data/lib/kl/compiler.rb +0 -360
  103. data/lib/kl/cons.rb +0 -51
  104. data/lib/kl/empty_list.rb +0 -12
  105. data/lib/kl/environment.rb +0 -163
  106. data/lib/kl/error.rb +0 -4
  107. data/lib/kl/internal_error.rb +0 -7
  108. data/lib/kl/lexer.rb +0 -186
  109. data/lib/kl/primitives/arithmetic.rb +0 -60
  110. data/lib/kl/primitives/assignments.rb +0 -15
  111. data/lib/kl/primitives/booleans.rb +0 -21
  112. data/lib/kl/primitives/error_handling.rb +0 -13
  113. data/lib/kl/primitives/extensions.rb +0 -12
  114. data/lib/kl/primitives/generic_functions.rb +0 -29
  115. data/lib/kl/primitives/lists.rb +0 -23
  116. data/lib/kl/primitives/streams.rb +0 -28
  117. data/lib/kl/primitives/strings.rb +0 -63
  118. data/lib/kl/primitives/symbols.rb +0 -18
  119. data/lib/kl/primitives/time.rb +0 -17
  120. data/lib/kl/primitives/vectors.rb +0 -36
  121. data/lib/kl/reader.rb +0 -46
  122. data/spec/kl/cons_spec.rb +0 -12
  123. data/spec/kl/environment_spec.rb +0 -282
  124. data/spec/kl/interop_spec.rb +0 -68
  125. data/spec/kl/lexer_spec.rb +0 -149
  126. data/spec/kl/primitives/generic_functions_spec.rb +0 -29
  127. data/spec/kl/primitives/symbols_spec.rb +0 -21
  128. data/spec/kl/reader_spec.rb +0 -42
@@ -1,71 +1,71 @@
1
- (define defstruct
2
- Name Slots
3
- -> (let Attributes (map (function fst) Slots)
4
- Types (map (function snd) Slots)
5
- Selectors (selectors Name Attributes)
6
- Constructor (constructor Name Attributes)
7
- Recognisor (recognisor Name)
8
- ConstructorType (constructor-type Name Types)
9
- SelectorTypes (selector-types Name Attributes Types)
10
- RecognisorType (recognisor-type Name)
11
- Name))
12
-
13
- (define selector-types
14
- _ [] [] -> (gensym (protect X))
15
- Name [Attribute | Attributes] [Type | Types]
16
- -> (let Selector (concat Name (concat - Attribute))
17
- SelectorType [Name --> Type]
18
- TypeDecl (declare Selector SelectorType)
19
- (selector-types Name Attributes Types)))
20
-
21
- (define recognisor-type
22
- Name -> (let Recognisor (concat Name ?)
23
- (declare Recognisor [Name --> boolean])))
24
-
25
- (define constructor-type
26
- Name Types -> (let Constructor (concat make- Name)
27
- Type (assemble-type Types Name)
28
- (declare Constructor Type)))
29
-
30
- (define assemble-type
31
- [ ] Name -> Name
32
- [Type | Types] Name -> [Type --> (assemble-type Types Name)])
33
-
34
- (declare defstruct [symbol --> [list [symbol * symbol]] --> symbol])
35
-
36
- (define selectors
37
- Name Attributes -> (map (/. A (selector Name A)) Attributes))
38
-
39
- (define selector
40
- Name Attribute
41
- -> (let SelectorName (concat Name (concat - Attribute))
42
- (eval [define SelectorName
43
- (protect Structure) -> [let (protect LookUp) [assoc Attribute (protect Structure)]
44
- [if [empty? (protect LookUp)]
45
- [error "~A is not an attribute of ~A.~%"
46
- Attribute Name]
47
- [tail (protect LookUp)]]]])))
48
-
49
- (define constructor
50
- Name Attributes
51
- -> (let ConstructorName (concat make- Name)
52
- Parameters (params Attributes)
53
- (eval [define ConstructorName |
54
- (append Parameters
55
- [-> [cons [cons structure Name]
56
- (make-association-list Attributes
57
- Parameters)]])])))
58
-
59
- (define params
60
- [] -> []
61
- [_ | Attributes] -> [(gensym (protect X)) | (params Attributes)])
62
-
63
- (define make-association-list
64
- [] [] -> []
65
- [A | As] [P | Ps] -> [cons [cons A P] (make-association-list As Ps)])
66
-
67
- (define recognisor
68
- Name -> (let RecognisorName (concat Name ?)
69
- (eval [define RecognisorName
70
- [cons [cons structure Name] _] -> true
71
- _ -> false])))
1
+ (define defstruct
2
+ Name Slots
3
+ -> (let Attributes (map (function fst) Slots)
4
+ Types (map (function snd) Slots)
5
+ Selectors (selectors Name Attributes)
6
+ Constructor (constructor Name Attributes)
7
+ Recognisor (recognisor Name)
8
+ ConstructorType (constructor-type Name Types)
9
+ SelectorTypes (selector-types Name Attributes Types)
10
+ RecognisorType (recognisor-type Name)
11
+ Name))
12
+
13
+ (define selector-types
14
+ _ [] [] -> (gensym (protect X))
15
+ Name [Attribute | Attributes] [Type | Types]
16
+ -> (let Selector (concat Name (concat - Attribute))
17
+ SelectorType [Name --> Type]
18
+ TypeDecl (declare Selector SelectorType)
19
+ (selector-types Name Attributes Types)))
20
+
21
+ (define recognisor-type
22
+ Name -> (let Recognisor (concat Name ?)
23
+ (declare Recognisor [Name --> boolean])))
24
+
25
+ (define constructor-type
26
+ Name Types -> (let Constructor (concat make- Name)
27
+ Type (assemble-type Types Name)
28
+ (declare Constructor Type)))
29
+
30
+ (define assemble-type
31
+ [ ] Name -> Name
32
+ [Type | Types] Name -> [Type --> (assemble-type Types Name)])
33
+
34
+ (declare defstruct [symbol --> [list [symbol * symbol]] --> symbol])
35
+
36
+ (define selectors
37
+ Name Attributes -> (map (/. A (selector Name A)) Attributes))
38
+
39
+ (define selector
40
+ Name Attribute
41
+ -> (let SelectorName (concat Name (concat - Attribute))
42
+ (eval [define SelectorName
43
+ (protect Structure) -> [let (protect LookUp) [assoc Attribute (protect Structure)]
44
+ [if [empty? (protect LookUp)]
45
+ [error "~A is not an attribute of ~A.~%"
46
+ Attribute Name]
47
+ [tail (protect LookUp)]]]])))
48
+
49
+ (define constructor
50
+ Name Attributes
51
+ -> (let ConstructorName (concat make- Name)
52
+ Parameters (params Attributes)
53
+ (eval [define ConstructorName |
54
+ (append Parameters
55
+ [-> [cons [cons structure Name]
56
+ (make-association-list Attributes
57
+ Parameters)]])])))
58
+
59
+ (define params
60
+ [] -> []
61
+ [_ | Attributes] -> [(gensym (protect X)) | (params Attributes)])
62
+
63
+ (define make-association-list
64
+ [] [] -> []
65
+ [A | As] [P | Ps] -> [cons [cons A P] (make-association-list As Ps)])
66
+
67
+ (define recognisor
68
+ Name -> (let RecognisorName (concat Name ?)
69
+ (eval [define RecognisorName
70
+ [cons [cons structure Name] _] -> true
71
+ _ -> false])))
@@ -1,42 +1,42 @@
1
- (define defstruct
2
- Name Attributes -> (let Selectors (selectors Name Attributes)
3
- Constructor (constructor Name Attributes)
4
- Recognisor (recognisor Name)
5
- Name))
6
-
7
- (define selectors
8
- Name Attributes -> (map (/. A (selector Name A)) Attributes))
9
-
10
- (define selector
11
- Name Attribute
12
- -> (let SelectorName (concat Name (concat - Attribute))
13
- (eval [define SelectorName
14
- (protect Structure) -> [let (protect LookUp) [assoc Attribute (protect Structure)]
15
- [if [empty? (protect LookUp)]
16
- [error "~A is not an attribute of ~A.~%"
17
- Attribute Name]
18
- [tail (protect LookUp)]]]])))
19
-
20
- (define constructor
21
- Name Attributes
22
- -> (let ConstructorName (concat make- Name)
23
- Parameters (params Attributes)
24
- (eval [define ConstructorName |
25
- (append Parameters
26
- [-> [cons [cons structure Name]
27
- (make-association-list Attributes
28
- Parameters)]])])))
29
-
30
- (define params
31
- [] -> []
32
- [_ | Attributes] -> [(gensym (protect X)) | (params Attributes)])
33
-
34
- (define make-association-list
35
- [] [] -> []
36
- [A | As] [P | Ps] -> [cons [cons A P] (make-association-list As Ps)])
37
-
38
- (define recognisor
39
- Name -> (let RecognisorName (concat Name ?)
40
- (eval [define RecognisorName
41
- [cons [cons structure Name] _] -> true
1
+ (define defstruct
2
+ Name Attributes -> (let Selectors (selectors Name Attributes)
3
+ Constructor (constructor Name Attributes)
4
+ Recognisor (recognisor Name)
5
+ Name))
6
+
7
+ (define selectors
8
+ Name Attributes -> (map (/. A (selector Name A)) Attributes))
9
+
10
+ (define selector
11
+ Name Attribute
12
+ -> (let SelectorName (concat Name (concat - Attribute))
13
+ (eval [define SelectorName
14
+ (protect Structure) -> [let (protect LookUp) [assoc Attribute (protect Structure)]
15
+ [if [empty? (protect LookUp)]
16
+ [error "~A is not an attribute of ~A.~%"
17
+ Attribute Name]
18
+ [tail (protect LookUp)]]]])))
19
+
20
+ (define constructor
21
+ Name Attributes
22
+ -> (let ConstructorName (concat make- Name)
23
+ Parameters (params Attributes)
24
+ (eval [define ConstructorName |
25
+ (append Parameters
26
+ [-> [cons [cons structure Name]
27
+ (make-association-list Attributes
28
+ Parameters)]])])))
29
+
30
+ (define params
31
+ [] -> []
32
+ [_ | Attributes] -> [(gensym (protect X)) | (params Attributes)])
33
+
34
+ (define make-association-list
35
+ [] [] -> []
36
+ [A | As] [P | Ps] -> [cons [cons A P] (make-association-list As Ps)])
37
+
38
+ (define recognisor
39
+ Name -> (let RecognisorName (concat Name ?)
40
+ (eval [define RecognisorName
41
+ [cons [cons structure Name] _] -> true
42
42
  _ -> false])))
@@ -1,233 +1,233 @@
1
- (maxinferences 10000000000)
2
-
3
- (report prolog-tests
4
- (load "prolog.shen") loaded
5
- (prolog? (f a)) true
6
- (prolog? (g a)) false
7
- (prolog? (g b)) true
8
- (prolog? (mem 1 [X | 2]) (return X)) 1
9
- (prolog? (rev [1 2] X) (return X)) [2 1]
10
- (load "einstein.shen") loaded
11
- (prolog? (einsteins_riddle X) (return X)) german
12
- (prolog? (enjoys mark X) (return X)) chocolate
13
- (prolog? (fads mark)) [tea chocolate]
14
- (prolog? (prop [] [p <=> p])) true
15
- (prolog? (mapit consit [1 2 3] Out) (return Out)) [[1 1] [1 2] [1 3]]
16
- (prolog? (different a b)) true
17
- (prolog? (different a a)) false
18
- (prolog? (likes john Who) (return Who)) mary
19
- (load "parse.prl") loaded
20
- (prolog? (pparse ["the" + ["boy" + "jumps"]]
21
- [[s = [np + vp]]
22
- [np = [det + n]]
23
- [det = "the"]
24
- [n = "girl"]
25
- [n = "boy"]
26
- [vp = vintrans]
27
- [vp = [vtrans + np]]
28
- [vintrans = "jumps"]
29
- [vtrans = "likes"]
30
- [vtrans = "loves"]])) true)
31
-
32
- \* (report "FPQi chapter 2"
33
- (load "fruit_machine.shen") loaded
34
- (do (print (fruit-machine start)) ok) ok) *\
35
-
36
-
37
- (report "FPQi chapter 4"
38
- (load "cartprod.shen") loaded
39
- (cartesian-product [1 2 3] [1 2 3])
40
- [[1 1] [1 2] [1 3] [2 1] [2 2] [2 3] [3 1] [3 2] [3 3]]
41
- (load "powerset.shen") loaded
42
- (powerset [1 2 3]) [[1 2 3] [1 2] [1 3] [1] [2 3] [2] [3] []])
43
-
44
- (do (set *sprd* )
45
- (nl 2))
46
-
47
- (report "FPQi chapter 5"
48
-
49
- (load "bubble_version_1.shen") loaded
50
- (bubble-sort [1 2 3]) [3 2 1]
51
- (load "bubble_version_2.shen") loaded
52
- (bubble-sort [1 2 3]) [3 2 1]
53
- \* (load "newton_version_1.shen") loaded
54
- (newtons-method 4) 2
55
- (load "newton_version_2.shen") loaded
56
- (newtons-method 4) 2 *\
57
- (load "spreadsheet.shen") loaded
58
- (assess-spreadsheet [[jim [wages (/. Spreadsheet (get' frank wages Spreadsheet))]
59
- [tax (/. Spreadsheet (* (get' frank tax Spreadsheet) .8))]]
60
- [frank [wages 20000]
61
- [tax (/. Spreadsheet (* .25 (get' frank wages Spreadsheet)))]]])
62
-
63
- [[jim [wages 20000] [tax 4000.0]] [frank [wages 20000] [tax 5000.0]]] )
64
-
65
- (report "FPQi chapter 3"
66
-
67
- (load "prime.shen") loaded
68
- (prime? 1000003) true
69
- (load "mutual.shen") loaded
70
- (even? 56) true
71
- (odd? 77) true
72
- (load "change.shen") loaded
73
- (count-change 100) 4563
74
- )
75
-
76
- (report "FPQi chapter 6"
77
- (load "semantic_net.shen") loaded
78
- (clear Mark_Tarver) []
79
- (clear man) []
80
- (assert [Mark_Tarver is_a man]) [man]
81
- (assert [man type_of human]) [human]
82
- (query [is Mark_Tarver human]) yes)
83
-
84
- (report "FPQi chapter 7"
85
-
86
- (load "proplog_version_1.shen") loaded
87
- (backchain q [[q <= p] [q <= r] [r <=]]) proved
88
- (backchain q [[q <= p] [q <= r]]) (fail)
89
- (load "proplog_version_2.shen") loaded
90
- (backchain q [[q <= p] [q <= r] r]) true
91
- (backchain q [[q <= p] [q <= r]]) false
92
- )
93
-
94
- (report "FPQi chapter 8"
95
-
96
- (load "metaprog.shen") loaded
97
- (generate_parser [sent --> np vp np --> name np --> det n
98
- name --> "John" name --> "Bill"
99
- name --> "Tom" det --> "the" det --> "a"
100
- det --> "that" det --> "this"
101
- n --> "girl" n --> "ball"
102
- vp --> vtrans np vp --> vintrans
103
- vtrans --> "kicks" vtrans --> "likes"
104
- vintrans --> "jumps" vintrans --> "flies"]) [sent np name det n vp vtrans vintrans]
105
-
106
- )
107
-
108
- (report "chapter 11"
109
- (load "binary.shen") loaded
110
- (complement [1 0]) [0 1]
111
- (load "streams.shen") loaded
112
- (fst (delay (@p 0 (+ 1) (/. X false)))) 1)
113
-
114
- (report "strings"
115
- (load "strings.shen") loaded
116
- (subst-string "a" "b" "cba") "caa"
117
- (strlen "123") 3
118
- (trim-string-left [" "] " hi ") "hi "
119
- (trim-string-right [" "] " hi ") " hi"
120
- (trim-string [" "] " hi ") "hi"
121
- (reverse-string "abc") "cba"
122
- (alldigits? "123") true)
123
-
124
- (report "calculator.shen - chapter 11"
125
- (load "calculator.shen") loaded
126
- (do-calculation [[num 12] + [[num 7] * [num 4]]]) 40 )
127
-
128
- (report "structures 1 - chapter 12"
129
- (load "structures-untyped.shen") loaded
130
- (defstruct ship [length name]) ship
131
- (make-ship 200 "Mary Rose") [[structure | ship] [length | 200] [name | "Mary Rose"]]
132
- (ship-length (make-ship 200 "Mary Rose")) 200
133
- (ship-name (make-ship 200 "Mary Rose")) "Mary Rose" )
134
-
135
- (report "structures 2 - chapter 12"
136
- (load "structures-typed.shen") loaded
137
- (defstruct ship [(@p length number) (@p name string)]) ship
138
- (make-ship 200 "Mary Rose") [[structure | ship] [length | 200] [name | "Mary Rose"]]
139
- (ship-length (make-ship 200 "Mary Rose")) 200
140
- (ship-name (make-ship 200 "Mary Rose")) "Mary Rose")
141
-
142
- (report "classes 1 - chapter 12"
143
- (load "classes-untyped.shen") loaded
144
- (defclass ship [length name]) ship
145
- (set s (make-instance ship)) [[class | ship] [length | fail] [name | fail]]
146
- (has-value? length (value s)) false
147
- (set s (change-value (value s) length 100)) [[class | ship] [length | 100] [name | fail]]
148
- (get-value length (value s)) 100)
149
-
150
- (report "classes 2 - chapter 12"
151
- (load "classes-typed.shen") loaded
152
- (defclass ship [(@p length number) (@p name string)]) ship
153
- (has-value? length (make-instance ship)) false
154
- (change-value (make-instance ship) length 100) [[class | ship] [length | 100] [name | fail]]
155
- (get-value length (change-value (make-instance ship) length 100)) 100)
156
-
157
- (report "abstract datatypes - chapter 12"
158
- (load "stack.shen") loaded
159
- (top (push 0 (empty-stack _))) 0
160
- )
161
-
162
- (report "yacc"
163
- (load "yacc.shen") loaded
164
- (compile <sent> [the cat likes the dog]) [the cat likes the dog]
165
- (compile <sent> [the cat likes the canary] (/. E (fail))) (fail)
166
- (compile <asbscs> [a a a b b c]) [a a a b b c]
167
- (compile <find-digit> [a v f g 6 y u]) [6]
168
- (compile <vp> [chases the cat]) [chases the cat]
169
- (compile <des> [[d] [e e]]) [d e e]
170
- (compile <sent'> [the cat likes the dog]) [is it true that your father likes the dog ?]
171
- (compile <as> [a a a]) [a a a]
172
- (compile <find-digit'> [a v f g 6 y u]) [6 y u]
173
- (compile <asbs'cs> [a v f g 6 y u] (/. E (fail))) (fail)
174
- (compile <find-digit''> [a v f g 6 y u]) 6
175
- (compile <anbncn> [a a a b b b c c c]) [a a a b b b c c c] )
176
-
177
- (preclude-all-but [])
178
- (tc +)
179
-
180
- (report "N Queens"
181
- (preclude-all-but []) []
182
- (tc +) true
183
- (load "n_queens.shen") loaded
184
- (n-queens 5) [[4 2 5 3 1] [3 5 2 4 1] [5 3 1 4 2] [4 1 3 5 2] [5 2 4 1 3] [1 4 2 5 3]
185
- [2 5 3 1 4] [1 3 5 2 4] [3 1 4 2 5] [2 4 1 3 5]]
186
- (tc -) false)
187
-
188
- (report "search"
189
- (tc +) true
190
- (load "search.shen") loaded
191
- (tc -) false)
192
-
193
- (report "whist - chapter 11"
194
- (tc +) true
195
- (load "whist.shen") loaded
196
- (tc -) false)
197
-
198
- (report "Qi interpreter - chapter 13"
199
- (tc +) true
200
- (load "interpreter.shen") loaded
201
- (tc -) false)
202
-
203
- (report "proof assistant - chapter 15"
204
- (tc +) true
205
- (load "proof_assistant.shen") loaded
206
- (tc -) false)
207
-
208
- (report "quantifier machine"
209
- (tc +) true
210
- (load "qmachine.shen") loaded
211
- \* (filter [1 (+ 1) (= 100)] (/. X (integer? (sqrt X)))) [1 4 9 16 25 36 49 64 81] *\
212
- (exists [1 (+ 1) (= 100)] (> 50)) true
213
- (tc -) false)
214
-
215
- (report "depth first search"
216
- (tc +) true
217
- (load "depth_.shen") loaded
218
- (depth' 4 (/. X [(+ X 3) (+ X 4) (+ X 5)]) (/. X (= X 27)) (/. X (> X 27))) [4 7 10 13 16 19 22 27]
219
- (depth' 4 (/. X [(+ X 3)]) (/. X (= X 27)) (/. X (> X 27))) []
220
- (tc -) false)
221
-
222
- \* (report "red/black trees"
223
- (tc +) true
224
- (load "red-black.shen") loaded) *\
225
-
226
- (report "Lisp type checker"
227
-
228
- (load "TinyTypes.shen") loaded
229
- (tc +) true
230
- (load "TinyLispFunctions.txt") loaded
231
- (tc -) false )
232
-
1
+ (maxinferences 10000000000)
2
+
3
+ (report prolog-tests
4
+ (load "prolog.shen") loaded
5
+ (prolog? (f a)) true
6
+ (prolog? (g a)) false
7
+ (prolog? (g b)) true
8
+ (prolog? (mem 1 [X | 2]) (return X)) 1
9
+ (prolog? (rev [1 2] X) (return X)) [2 1]
10
+ (load "einstein.shen") loaded
11
+ (prolog? (einsteins_riddle X) (return X)) german
12
+ (prolog? (enjoys mark X) (return X)) chocolate
13
+ (prolog? (fads mark)) [tea chocolate]
14
+ (prolog? (prop [] [p <=> p])) true
15
+ (prolog? (mapit consit [1 2 3] Out) (return Out)) [[1 1] [1 2] [1 3]]
16
+ (prolog? (different a b)) true
17
+ (prolog? (different a a)) false
18
+ (prolog? (likes john Who) (return Who)) mary
19
+ (load "parse.prl") loaded
20
+ (prolog? (pparse ["the" + ["boy" + "jumps"]]
21
+ [[s = [np + vp]]
22
+ [np = [det + n]]
23
+ [det = "the"]
24
+ [n = "girl"]
25
+ [n = "boy"]
26
+ [vp = vintrans]
27
+ [vp = [vtrans + np]]
28
+ [vintrans = "jumps"]
29
+ [vtrans = "likes"]
30
+ [vtrans = "loves"]])) true)
31
+
32
+ \* (report "FPQi chapter 2"
33
+ (load "fruit_machine.shen") loaded
34
+ (do (print (fruit-machine start)) ok) ok) *\
35
+
36
+
37
+ (report "FPQi chapter 4"
38
+ (load "cartprod.shen") loaded
39
+ (cartesian-product [1 2 3] [1 2 3])
40
+ [[1 1] [1 2] [1 3] [2 1] [2 2] [2 3] [3 1] [3 2] [3 3]]
41
+ (load "powerset.shen") loaded
42
+ (powerset [1 2 3]) [[1 2 3] [1 2] [1 3] [1] [2 3] [2] [3] []])
43
+
44
+ (do (set *sprd* )
45
+ (nl 2))
46
+
47
+ (report "FPQi chapter 5"
48
+
49
+ (load "bubble_version_1.shen") loaded
50
+ (bubble-sort [1 2 3]) [3 2 1]
51
+ (load "bubble_version_2.shen") loaded
52
+ (bubble-sort [1 2 3]) [3 2 1]
53
+ \* (load "newton_version_1.shen") loaded
54
+ (newtons-method 4) 2
55
+ (load "newton_version_2.shen") loaded
56
+ (newtons-method 4) 2 *\
57
+ (load "spreadsheet.shen") loaded
58
+ (assess-spreadsheet [[jim [wages (/. Spreadsheet (get' frank wages Spreadsheet))]
59
+ [tax (/. Spreadsheet (* (get' frank tax Spreadsheet) .8))]]
60
+ [frank [wages 20000]
61
+ [tax (/. Spreadsheet (* .25 (get' frank wages Spreadsheet)))]]])
62
+
63
+ [[jim [wages 20000] [tax 4000.0]] [frank [wages 20000] [tax 5000.0]]] )
64
+
65
+ (report "FPQi chapter 3"
66
+
67
+ (load "prime.shen") loaded
68
+ (prime? 1000003) true
69
+ (load "mutual.shen") loaded
70
+ (even? 56) true
71
+ (odd? 77) true
72
+ (load "change.shen") loaded
73
+ (count-change 100) 4563
74
+ )
75
+
76
+ (report "FPQi chapter 6"
77
+ (load "semantic_net.shen") loaded
78
+ (clear Mark_Tarver) []
79
+ (clear man) []
80
+ (assert [Mark_Tarver is_a man]) [man]
81
+ (assert [man type_of human]) [human]
82
+ (query [is Mark_Tarver human]) yes)
83
+
84
+ (report "FPQi chapter 7"
85
+
86
+ (load "proplog_version_1.shen") loaded
87
+ (backchain q [[q <= p] [q <= r] [r <=]]) proved
88
+ (backchain q [[q <= p] [q <= r]]) (fail)
89
+ (load "proplog_version_2.shen") loaded
90
+ (backchain q [[q <= p] [q <= r] r]) true
91
+ (backchain q [[q <= p] [q <= r]]) false
92
+ )
93
+
94
+ (report "FPQi chapter 8"
95
+
96
+ (load "metaprog.shen") loaded
97
+ (generate_parser [sent --> np vp np --> name np --> det n
98
+ name --> "John" name --> "Bill"
99
+ name --> "Tom" det --> "the" det --> "a"
100
+ det --> "that" det --> "this"
101
+ n --> "girl" n --> "ball"
102
+ vp --> vtrans np vp --> vintrans
103
+ vtrans --> "kicks" vtrans --> "likes"
104
+ vintrans --> "jumps" vintrans --> "flies"]) [sent np name det n vp vtrans vintrans]
105
+
106
+ )
107
+
108
+ (report "chapter 11"
109
+ (load "binary.shen") loaded
110
+ (complement [1 0]) [0 1]
111
+ (load "streams.shen") loaded
112
+ (fst (delay (@p 0 (+ 1) (/. X false)))) 1)
113
+
114
+ (report "strings"
115
+ (load "strings.shen") loaded
116
+ (subst-string "a" "b" "cba") "caa"
117
+ (strlen "123") 3
118
+ (trim-string-left [" "] " hi ") "hi "
119
+ (trim-string-right [" "] " hi ") " hi"
120
+ (trim-string [" "] " hi ") "hi"
121
+ (reverse-string "abc") "cba"
122
+ (alldigits? "123") true)
123
+
124
+ (report "calculator.shen - chapter 11"
125
+ (load "calculator.shen") loaded
126
+ (do-calculation [[num 12] + [[num 7] * [num 4]]]) 40 )
127
+
128
+ (report "structures 1 - chapter 12"
129
+ (load "structures-untyped.shen") loaded
130
+ (defstruct ship [length name]) ship
131
+ (make-ship 200 "Mary Rose") [[structure | ship] [length | 200] [name | "Mary Rose"]]
132
+ (ship-length (make-ship 200 "Mary Rose")) 200
133
+ (ship-name (make-ship 200 "Mary Rose")) "Mary Rose" )
134
+
135
+ (report "structures 2 - chapter 12"
136
+ (load "structures-typed.shen") loaded
137
+ (defstruct ship [(@p length number) (@p name string)]) ship
138
+ (make-ship 200 "Mary Rose") [[structure | ship] [length | 200] [name | "Mary Rose"]]
139
+ (ship-length (make-ship 200 "Mary Rose")) 200
140
+ (ship-name (make-ship 200 "Mary Rose")) "Mary Rose")
141
+
142
+ (report "classes 1 - chapter 12"
143
+ (load "classes-untyped.shen") loaded
144
+ (defclass ship [length name]) ship
145
+ (set s (make-instance ship)) [[class | ship] [length | fail] [name | fail]]
146
+ (has-value? length (value s)) false
147
+ (set s (change-value (value s) length 100)) [[class | ship] [length | 100] [name | fail]]
148
+ (get-value length (value s)) 100)
149
+
150
+ (report "classes 2 - chapter 12"
151
+ (load "classes-typed.shen") loaded
152
+ (defclass ship [(@p length number) (@p name string)]) ship
153
+ (has-value? length (make-instance ship)) false
154
+ (change-value (make-instance ship) length 100) [[class | ship] [length | 100] [name | fail]]
155
+ (get-value length (change-value (make-instance ship) length 100)) 100)
156
+
157
+ (report "abstract datatypes - chapter 12"
158
+ (load "stack.shen") loaded
159
+ (top (push 0 (empty-stack _))) 0
160
+ )
161
+
162
+ (report "yacc"
163
+ (load "yacc.shen") loaded
164
+ (compile <sent> [the cat likes the dog]) [the cat likes the dog]
165
+ (compile <sent> [the cat likes the canary] (/. E (fail))) (fail)
166
+ (compile <asbscs> [a a a b b c]) [a a a b b c]
167
+ (compile <find-digit> [a v f g 6 y u]) [6]
168
+ (compile <vp> [chases the cat]) [chases the cat]
169
+ (compile <des> [[d] [e e]]) [d e e]
170
+ (compile <sent'> [the cat likes the dog]) [is it true that your father likes the dog ?]
171
+ (compile <as> [a a a]) [a a a]
172
+ (compile <find-digit'> [a v f g 6 y u]) [6 y u]
173
+ (compile <asbs'cs> [a v f g 6 y u] (/. E (fail))) (fail)
174
+ (compile <find-digit''> [a v f g 6 y u]) 6
175
+ (compile <anbncn> [a a a b b b c c c]) [a a a b b b c c c] )
176
+
177
+ (preclude-all-but [])
178
+ (tc +)
179
+
180
+ (report "N Queens"
181
+ (preclude-all-but []) []
182
+ (tc +) true
183
+ (load "n_queens.shen") loaded
184
+ (n-queens 5) [[4 2 5 3 1] [3 5 2 4 1] [5 3 1 4 2] [4 1 3 5 2] [5 2 4 1 3] [1 4 2 5 3]
185
+ [2 5 3 1 4] [1 3 5 2 4] [3 1 4 2 5] [2 4 1 3 5]]
186
+ (tc -) false)
187
+
188
+ (report "search"
189
+ (tc +) true
190
+ (load "search.shen") loaded
191
+ (tc -) false)
192
+
193
+ (report "whist - chapter 11"
194
+ (tc +) true
195
+ (load "whist.shen") loaded
196
+ (tc -) false)
197
+
198
+ (report "Qi interpreter - chapter 13"
199
+ (tc +) true
200
+ (load "interpreter.shen") loaded
201
+ (tc -) false)
202
+
203
+ (report "proof assistant - chapter 15"
204
+ (tc +) true
205
+ (load "proof_assistant.shen") loaded
206
+ (tc -) false)
207
+
208
+ (report "quantifier machine"
209
+ (tc +) true
210
+ (load "qmachine.shen") loaded
211
+ \* (filter [1 (+ 1) (= 100)] (/. X (integer? (sqrt X)))) [1 4 9 16 25 36 49 64 81] *\
212
+ (exists [1 (+ 1) (= 100)] (> 50)) true
213
+ (tc -) false)
214
+
215
+ (report "depth first search"
216
+ (tc +) true
217
+ (load "depth_.shen") loaded
218
+ (depth' 4 (/. X [(+ X 3) (+ X 4) (+ X 5)]) (/. X (= X 27)) (/. X (> X 27))) [4 7 10 13 16 19 22 27]
219
+ (depth' 4 (/. X [(+ X 3)]) (/. X (= X 27)) (/. X (> X 27))) []
220
+ (tc -) false)
221
+
222
+ \* (report "red/black trees"
223
+ (tc +) true
224
+ (load "red-black.shen") loaded) *\
225
+
226
+ (report "Lisp type checker"
227
+
228
+ (load "TinyTypes.shen") loaded
229
+ (tc +) true
230
+ (load "TinyLispFunctions.txt") loaded
231
+ (tc -) false )
232
+
233
233
  (reset)