rubylog 1.0.0 → 2.0pre1

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 (163) hide show
  1. data/Gemfile +3 -12
  2. data/Gemfile.lock +22 -48
  3. data/README.rdoc +38 -38
  4. data/README.rdoc.orig +284 -0
  5. data/RELEASE_NOTES.rdoc +51 -0
  6. data/Rakefile +14 -18
  7. data/TODO.txt +0 -0
  8. data/VERSION +1 -1
  9. data/examples/a_plus_b.rb +6 -0
  10. data/examples/checkmate.rb +88 -0
  11. data/examples/combination.rb +17 -0
  12. data/examples/dcg.rb +3 -2
  13. data/examples/dcg2.rb +2 -2
  14. data/{logic → examples}/directory_structure_logic.rb +3 -5
  15. data/examples/dirlist.rb +4 -0
  16. data/examples/divisors.rb +6 -0
  17. data/examples/enumerators.rb +3 -3
  18. data/examples/factorial.rb +2 -3
  19. data/examples/file_search.rb +14 -0
  20. data/examples/hanoi.rb +4 -5
  21. data/examples/hello.rb +6 -4
  22. data/examples/mice.rb +92 -0
  23. data/examples/mice2.rb +19 -0
  24. data/examples/n_queens.rb +32 -0
  25. data/examples/object_oriented.rb +14 -0
  26. data/examples/palindrome_detection.rb +18 -0
  27. data/examples/parsing.rb +6 -4
  28. data/examples/permutation.rb +12 -0
  29. data/examples/prefix.rb +13 -0
  30. data/examples/primality_by_division.rb +22 -0
  31. data/examples/primitives.rb +10 -8
  32. data/examples/sieve_of_eratosthenes.rb +14 -0
  33. data/examples/string_interpolation.rb +4 -0
  34. data/examples/sudoku.rb +52 -0
  35. data/examples/tracing.rb +19 -0
  36. data/lib/rspec/rubylog.rb +29 -0
  37. data/lib/rubylog/assertable.rb +24 -0
  38. data/lib/rubylog/builtins/arithmetics.rb +63 -0
  39. data/lib/rubylog/builtins/assumption.rb +71 -0
  40. data/lib/rubylog/builtins/ensure.rb +13 -0
  41. data/lib/rubylog/builtins/file_system.rb +30 -8
  42. data/lib/rubylog/builtins/logic.rb +69 -38
  43. data/lib/rubylog/builtins/reflection.rb +35 -50
  44. data/lib/rubylog/builtins/term.rb +15 -17
  45. data/lib/rubylog/builtins.rb +11 -0
  46. data/lib/rubylog/clause.rb +19 -0
  47. data/lib/rubylog/{interfaces/composite_term.rb → compound_term.rb} +3 -3
  48. data/lib/rubylog/context.rb +24 -0
  49. data/lib/rubylog/context_creation.rb +71 -0
  50. data/lib/rubylog/context_modules/checks.rb +35 -0
  51. data/lib/rubylog/context_modules/demonstration.rb +16 -0
  52. data/lib/rubylog/context_modules/predicates.rb +86 -0
  53. data/lib/rubylog/context_modules/primitives.rb +18 -0
  54. data/lib/rubylog/context_modules/thats.rb +13 -0
  55. data/lib/rubylog/default_context.rb +9 -0
  56. data/lib/rubylog/dsl/array_splat.rb +11 -3
  57. data/lib/rubylog/dsl/primitives.rb +24 -12
  58. data/lib/rubylog/dsl/thats.rb +6 -0
  59. data/lib/rubylog/dsl/variables.rb +56 -21
  60. data/lib/rubylog/errors.rb +26 -15
  61. data/lib/rubylog/mixins/array.rb +95 -62
  62. data/lib/rubylog/mixins/kernel.rb +3 -2
  63. data/lib/rubylog/mixins/method.rb +0 -1
  64. data/lib/rubylog/mixins/object.rb +2 -1
  65. data/lib/rubylog/mixins/proc.rb +9 -12
  66. data/lib/rubylog/mixins/string.rb +15 -23
  67. data/lib/rubylog/mixins/symbol.rb +7 -24
  68. data/lib/rubylog/nullary_predicates.rb +3 -0
  69. data/lib/rubylog/predicate.rb +53 -0
  70. data/lib/rubylog/primitive.rb +15 -0
  71. data/lib/rubylog/procedure.rb +42 -0
  72. data/lib/rubylog/rule.rb +24 -0
  73. data/lib/rubylog/structure.rb +19 -38
  74. data/lib/rubylog/{interfaces/term.rb → term.rb} +2 -7
  75. data/lib/rubylog/tracing.rb +75 -0
  76. data/lib/rubylog/variable.rb +31 -12
  77. data/lib/rubylog.rb +36 -32
  78. data/rubylog.gemspec +92 -84
  79. data/spec/inriasuite_spec.rb +906 -9
  80. data/spec/integration/custom_classes_spec.rb +61 -0
  81. data/spec/integration/dsl_spec.rb +38 -0
  82. data/spec/integration/recursion_spec.rb +14 -0
  83. data/spec/integration/theory_as_module_spec.rb +20 -0
  84. data/spec/integration/theory_as_module_with_include_spec.rb +14 -0
  85. data/spec/rspec/rubylog_spec.rb +75 -0
  86. data/spec/rubylog/assertable_spec.rb +111 -0
  87. data/spec/rubylog/builtins/arithmetics_spec.rb +94 -0
  88. data/spec/rubylog/builtins/assumption_spec.rb +70 -0
  89. data/spec/rubylog/builtins/ensure_spec.rb +8 -0
  90. data/spec/rubylog/builtins/file_system_spec.rb +40 -0
  91. data/spec/rubylog/builtins/logic_spec.rb +340 -0
  92. data/spec/rubylog/builtins/reflection_spec.rb +43 -0
  93. data/spec/rubylog/builtins/term_spec.rb +85 -0
  94. data/spec/rubylog/context_modules/demonstration_spec.rb +132 -0
  95. data/spec/rubylog/context_modules/predicates_spec.rb +57 -0
  96. data/spec/rubylog/context_modules/thats_spec.rb +94 -0
  97. data/spec/rubylog/dsl/array_splat_spec.rb +15 -0
  98. data/spec/rubylog/dsl/primitives_spec.rb +43 -0
  99. data/spec/rubylog/errors_spec.rb +18 -0
  100. data/spec/{unification_spec.rb → rubylog/interfaces/term_spec.rb} +8 -9
  101. data/spec/rubylog/mixins/array_spec.rb +80 -0
  102. data/spec/rubylog/mixins/composite_term_spec.rb +66 -0
  103. data/spec/rubylog/mixins/proc_spec.rb +59 -0
  104. data/spec/rubylog/mixins/string_spec.rb +48 -0
  105. data/spec/rubylog/mixins/symbol_spec.rb +9 -0
  106. data/spec/{clause_spec.rb → rubylog/structure_spec.rb} +16 -15
  107. data/spec/rubylog/term_spec.rb +7 -0
  108. data/spec/rubylog/tracing_spec.input +27 -0
  109. data/spec/rubylog/tracing_spec.rb +44 -0
  110. data/spec/rubylog/variable_spec.rb +279 -0
  111. data/spec/spec_helper.rb +1 -0
  112. data/vimrc +11 -0
  113. metadata +103 -123
  114. data/README.hu.rb +0 -58
  115. data/bin/rubylog +0 -18
  116. data/examples/theory.rb +0 -32
  117. data/lib/rubylog/builtins/default.rb +0 -10
  118. data/lib/rubylog/dsl.rb +0 -70
  119. data/lib/rubylog/interfaces/assertable.rb +0 -16
  120. data/lib/rubylog/interfaces/callable.rb +0 -18
  121. data/lib/rubylog/interfaces/predicate.rb +0 -8
  122. data/lib/rubylog/interfaces/procedure.rb +0 -60
  123. data/lib/rubylog/mixins/class.rb +0 -11
  124. data/lib/rubylog/simple_procedure.rb +0 -8
  125. data/lib/rubylog/theory.rb +0 -422
  126. data/logic/builtins/file_system_logic.rb +0 -23
  127. data/logic/builtins/reflection_logic.rb +0 -40
  128. data/logic/dereference_logic.rb +0 -23
  129. data/logic/dsl_logic.rb +0 -29
  130. data/logic/errors_logic.rb +0 -9
  131. data/logic/guard_logic.rb +0 -115
  132. data/logic/list_logic.rb +0 -55
  133. data/logic/map_logic.rb +0 -15
  134. data/logic/multitheory.rb +0 -23
  135. data/logic/recursion_logic.rb +0 -12
  136. data/logic/string_logic.rb +0 -41
  137. data/logic/thats_logic.rb +0 -51
  138. data/logic/variable_logic.rb +0 -24
  139. data/spec/bartak_guide_spec.rb +0 -86
  140. data/spec/builtins/all_spec.rb +0 -99
  141. data/spec/builtins/and_spec.rb +0 -22
  142. data/spec/builtins/array_spec.rb +0 -16
  143. data/spec/builtins/branch_or_spec.rb +0 -27
  144. data/spec/builtins/cut_spec.rb +0 -44
  145. data/spec/builtins/fail_spec.rb +0 -5
  146. data/spec/builtins/false_spec.rb +0 -5
  147. data/spec/builtins/in_spec.rb +0 -38
  148. data/spec/builtins/is_false_spec.rb +0 -12
  149. data/spec/builtins/is_spec.rb +0 -26
  150. data/spec/builtins/matches_spec.rb +0 -23
  151. data/spec/builtins/or_spec.rb +0 -22
  152. data/spec/builtins/splits_to.rb +0 -18
  153. data/spec/builtins/then_spec.rb +0 -27
  154. data/spec/builtins/true_spec.rb +0 -5
  155. data/spec/compilation_spec.rb +0 -61
  156. data/spec/custom_classes_spec.rb +0 -43
  157. data/spec/dereference.rb +0 -10
  158. data/spec/queries_spec.rb +0 -150
  159. data/spec/recursion_spec.rb +0 -18
  160. data/spec/ruby_code_spec.rb +0 -52
  161. data/spec/rules_spec.rb +0 -97
  162. data/spec/theory_spec.rb +0 -29
  163. data/spec/variable_spec.rb +0 -26
@@ -0,0 +1,279 @@
1
+ require "spec_helper"
2
+
3
+ describe Rubylog::Variable, :rubylog=>true do
4
+ it "is created when an undefined constant name appears" do
5
+ [A, SomethingLong].each{|x|x.should be_kind_of Rubylog::Variable}
6
+ end
7
+
8
+ it "supports ==" do
9
+ A.should == A
10
+ end
11
+
12
+ it "supports eql?" do
13
+ A.should be_eql A
14
+ end
15
+
16
+ it "returns different instances" do
17
+ A.should_not be_equal A
18
+ end
19
+
20
+ describe "dont-care variables" do
21
+ specify "start with ANY or Any or AnY" do
22
+ [ANY, Anything, AnYTIME].each{|x|x.should be_kind_of Rubylog::Variable; x.should be_dont_care}
23
+ [NOBODY, EVERYBODY, SOMEBODY].each{|x|x.should be_kind_of Rubylog::Variable; x.should_not be_dont_care}
24
+ end
25
+ end
26
+
27
+ describe "#value" do
28
+ it "returns the value if bound" do
29
+ a = A
30
+ a.send :bind_to, 5 do
31
+ a.value.should == 5
32
+ end
33
+ end
34
+
35
+ it "returns nil if unbound" do
36
+ a = A
37
+ a.send :bind_to, 5 do
38
+ end
39
+ a.value.should == nil
40
+ end
41
+ end
42
+
43
+ describe "unification" do
44
+ it "unifies with non-var" do
45
+ a=A
46
+ a.rubylog_unify(4) do
47
+ a.should be_bound
48
+ a.value.should eql 4
49
+ end
50
+ end
51
+
52
+ it "unifies with non-var (reversed)" do
53
+ a=A
54
+ 4.rubylog_unify(a) do
55
+ a.should be_bound
56
+ a.value.should eql 4
57
+ end
58
+ end
59
+
60
+ it "unifies with another unbound variable with the other gettin bound" do
61
+ a=A
62
+ b=B
63
+ a.rubylog_unify(b) do
64
+ b.should be_bound
65
+ b.value.should equal a
66
+ a.should_not be_bound
67
+ end
68
+ end
69
+
70
+ it "unifies with a bound variable" do
71
+ a=A
72
+ b=B
73
+ b.send(:bind_to, 4) do
74
+ a.rubylog_unify(b) do
75
+ a.value.should == 4
76
+ end
77
+ end
78
+ end
79
+
80
+ it "when bound, unifies with an unbound variable" do
81
+ a=A
82
+ b=B
83
+ a.send(:bind_to, 4) do
84
+ a.rubylog_unify(b) do
85
+ b.value.should == 4
86
+ end
87
+ end
88
+ end
89
+ end
90
+
91
+ describe "dereferencing" do
92
+ predicate_for Integer, ".divides()"
93
+
94
+ check { A.is_a? Rubylog::Variable }
95
+ check { A.rubylog_deep_dereference == A }
96
+
97
+ a = A
98
+ check { a.rubylog_deep_dereference.equal? a }
99
+
100
+ check { not a.bound? }
101
+
102
+ specify do
103
+ a.rubylog_unify(4) do
104
+ check { a.bound? }
105
+ check { a.rubylog_deep_dereference == 4 }
106
+ check { [1,a].rubylog_deep_dereference == [1,4] }
107
+ check { a.divides(16).rubylog_deep_dereference == 4.divides(16) }
108
+ end
109
+ end
110
+
111
+ b = []
112
+ check { not b.rubylog_deep_dereference.equal? b }
113
+
114
+ c = Object.new
115
+ check { c.rubylog_deep_dereference.equal? c }
116
+ end
117
+
118
+ describe "dont-care variables are case insensitive ANY* and _*" do
119
+ check 3.is(ANY).and 3.is(ANY)
120
+ check 3.is(ANY).and 4.is(ANY)
121
+ check 3.is(ANYTHING).and 3.is(ANYTHING)
122
+ check 3.is(ANYTHING).and 4.is(ANYTHING)
123
+ check 3.is(Anything).and 3.is(Anything)
124
+ check 3.is(Anything).and 4.is(Anything)
125
+ check 3.is(Rubylog::Variable.new(:_var1)).and(3.is(Rubylog::Variable.new(:_var1)))
126
+ check 3.is(Rubylog::Variable.new(:_var1)).and(4.is(Rubylog::Variable.new(:_var1)))
127
+ check 3.is(Rubylog::Variable.new(:var1 )).and(3.is(Rubylog::Variable.new(:var1 )))
128
+ check 3.is(Rubylog::Variable.new(:var1 )).and(4.is(Rubylog::Variable.new(:var1 ))).false
129
+ end
130
+
131
+ describe "dont-care variables support recursion" do
132
+ predicate_for Integer, ".factorial()"
133
+ 0.factorial! 1
134
+ N.factorial(K).if proc{N > 0}.and N1.is {N-1} .and N1.factorial(K1).and K.is{ N*K1 }.and K.is(ANY1).and N.is(ANY2)
135
+ check 0.factorial 1
136
+ check 1.factorial 1
137
+ check 2.factorial 2
138
+ check 3.factorial 6
139
+ check 4.factorial 24
140
+ check 7.factorial 5040
141
+ end
142
+
143
+ describe "calling" do
144
+ describe "precompiled" do
145
+ check B.is(4).and A.is(B.is(C).and C.is(4)).and A
146
+ check((B.is(4).and A.is(B.is(C).and C.is(3)).and A).false)
147
+ end
148
+
149
+ describe "compiled run-time" do
150
+ check B.is(4).and A.is{B.is(C).and C.is(4)}.and A
151
+ check((B.is(4).and A.is{B.is(C).and C.is(3)}.and A).false)
152
+ end
153
+
154
+ end
155
+
156
+ describe "guards", :rubylog=>true do
157
+
158
+ describe "class guard" do
159
+ predicate_for [Integer,Float], ".divides()"
160
+ A[Integer].divides(B[Integer]).if { B % A == 0 }
161
+ A[Float].divides!(B[Float])
162
+ check 2.divides(10)
163
+ check 2.divides(9).false
164
+ check 2.divides(1).false
165
+ check 2.divides(0)
166
+ check 2.12.divides(4.5)
167
+ check -0.31.divides(-1.5)
168
+ check 0.3.divides(3).false
169
+ check 2.0.divides(10).false
170
+ check 2.divides(10.0).false
171
+ check 2.divides(9.0).false
172
+ end
173
+
174
+ describe "union of guards at compile" do
175
+ predicate_for Numeric, ".small"
176
+ A[0...100].small.if ANY.is A[Integer]
177
+ check 0.small
178
+ check 10.small
179
+ check -1.small.false
180
+ check 0.0.small.false
181
+ check 99.small
182
+ check 99.0.small.false
183
+ check 99.9.small.false
184
+ check 100.small.false
185
+ check 100.0.small.false
186
+ end
187
+
188
+ describe "union of guards at compile (dont-care)" do
189
+ predicate_for Numeric, ".small"
190
+ A[0...100].small.if A.is ANY[Integer]
191
+ check 0.small
192
+ check 10.small
193
+ check -1.small.false
194
+ check 0.0.small.false
195
+ check 99.small
196
+ check 99.0.small.false
197
+ check 99.9.small.false
198
+ check 100.small.false
199
+ check 100.0.small.false
200
+ end
201
+
202
+ describe "union of guards at unification" do
203
+ predicate_for Numeric, ".small"
204
+ A[0...100].small.if A.is B[Integer]
205
+ check 0.small
206
+ check 10.small
207
+ check -1.small.false
208
+ check 0.0.small.false
209
+ check 99.small
210
+ check 99.0.small.false
211
+ check 99.9.small.false
212
+ check 100.small.false
213
+ check 100.0.small.false
214
+ end
215
+
216
+ describe "union of guards at unification (reversed)" do
217
+ predicate_for Numeric, ".small"
218
+ A[0...100].small.if B[Integer].is A
219
+ check 0.small
220
+ check 10.small
221
+ check -1.small.false
222
+ check 0.0.small.false
223
+ check 99.small
224
+ check 99.0.small.false
225
+ check 99.9.small.false
226
+ check 100.small.false
227
+ check 100.0.small.false
228
+ end
229
+
230
+
231
+ describe "proc guards" do
232
+ predicate_for Numeric, ".big"
233
+ A[proc{|a|a > 20}].big!
234
+ check -100.big.false
235
+ check 0.big.false
236
+ check 10.big.false
237
+ check 20.big.false
238
+ check 21.big
239
+ check 200.big
240
+ end
241
+
242
+ describe "hash guards" do
243
+ predicate_for String, ".char"
244
+ S[length: 1].char!
245
+ check "a".char
246
+ check " ".char
247
+ check "".char.false
248
+ check "af".char.false
249
+ check "Hello".char.false
250
+ end
251
+
252
+ describe "list hash guards" do
253
+ predicate_for String, ".capitalized"
254
+ S[[:[],0] => /[A-Z]/].capitalized!
255
+ check "a".capitalized.false
256
+ check " ".capitalized.false
257
+ check "".capitalized.false
258
+ check "af".capitalized.false
259
+ check "A".capitalized
260
+ check "Hello".capitalized
261
+ end
262
+
263
+
264
+ describe "chained hash guards" do
265
+ predicate_for String, ".funny"
266
+ S[upcase: {[:[],1..-2] => "ELL"}].funny!
267
+ check "hello".funny
268
+ check "Bell!".funny
269
+ check "BELL!".funny
270
+ check "DELL".funny.false
271
+ check "help!".funny.false
272
+ check "hello!".funny.false
273
+ end
274
+
275
+
276
+
277
+ end
278
+ end
279
+
data/spec/spec_helper.rb CHANGED
@@ -6,6 +6,7 @@ require 'simplecov'
6
6
  SimpleCov.start
7
7
 
8
8
  require 'rubylog'
9
+ require 'rspec/rubylog'
9
10
 
10
11
  # Requires supporting files with custom matchers and macros, etc,
11
12
  # in ./support/ and its subdirectories.
data/vimrc ADDED
@@ -0,0 +1,11 @@
1
+ set makeprg=rspec
2
+ map <F9> :make<CR><CR>
3
+
4
+ noremap r :e lib/rubylog/
5
+ noremap e :e lib/rubylog/
6
+ noremap s :sp lib/rubylog/
7
+ noremap v :vs lib/rubylog/
8
+ noremap g :!git
9
+ noremap d yiwq:ivim -def 0\>- lib**<CR>
10
+ noremap f yiwq:ivim -\<0\>- lib**<CR>
11
+
metadata CHANGED
@@ -1,30 +1,33 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubylog
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
5
- prerelease:
4
+ version: 2.0pre1
5
+ prerelease: 3
6
6
  platform: ruby
7
7
  authors:
8
8
  - Bernát Kalló
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-02-27 00:00:00.000000000Z
12
+ date: 2013-05-02 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &87769710 !ruby/object:Gem::Requirement
16
+ requirement: &80714410 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
- - - ~>
19
+ - - <
20
+ - !ruby/object:Gem::Version
21
+ version: '3'
22
+ - - ! '>='
20
23
  - !ruby/object:Gem::Version
21
24
  version: 2.8.0
22
25
  type: :development
23
26
  prerelease: false
24
- version_requirements: *87769710
27
+ version_requirements: *80714410
25
28
  - !ruby/object:Gem::Dependency
26
29
  name: yard
27
- requirement: &87769290 !ruby/object:Gem::Requirement
30
+ requirement: &80713870 !ruby/object:Gem::Requirement
28
31
  none: false
29
32
  requirements:
30
33
  - - ~>
@@ -32,54 +35,32 @@ dependencies:
32
35
  version: '0.7'
33
36
  type: :development
34
37
  prerelease: false
35
- version_requirements: *87769290
36
- - !ruby/object:Gem::Dependency
37
- name: rdoc
38
- requirement: &87768850 !ruby/object:Gem::Requirement
39
- none: false
40
- requirements:
41
- - - ~>
42
- - !ruby/object:Gem::Version
43
- version: '3.12'
44
- type: :development
45
- prerelease: false
46
- version_requirements: *87768850
47
- - !ruby/object:Gem::Dependency
48
- name: cucumber
49
- requirement: &87722730 !ruby/object:Gem::Requirement
50
- none: false
51
- requirements:
52
- - - ! '>='
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
- type: :development
56
- prerelease: false
57
- version_requirements: *87722730
38
+ version_requirements: *80713870
58
39
  - !ruby/object:Gem::Dependency
59
40
  name: bundler
60
- requirement: &87722330 !ruby/object:Gem::Requirement
41
+ requirement: &80713360 !ruby/object:Gem::Requirement
61
42
  none: false
62
43
  requirements:
63
- - - ~>
44
+ - - ! '>='
64
45
  - !ruby/object:Gem::Version
65
46
  version: 1.0.0
66
47
  type: :development
67
48
  prerelease: false
68
- version_requirements: *87722330
49
+ version_requirements: *80713360
69
50
  - !ruby/object:Gem::Dependency
70
51
  name: jeweler
71
- requirement: &87721950 !ruby/object:Gem::Requirement
52
+ requirement: &80712960 !ruby/object:Gem::Requirement
72
53
  none: false
73
54
  requirements:
74
- - - ~>
55
+ - - ! '>='
75
56
  - !ruby/object:Gem::Version
76
57
  version: 1.8.3
77
58
  type: :development
78
59
  prerelease: false
79
- version_requirements: *87721950
60
+ version_requirements: *80712960
80
61
  - !ruby/object:Gem::Dependency
81
62
  name: simplecov
82
- requirement: &87721520 !ruby/object:Gem::Requirement
63
+ requirement: &80712570 !ruby/object:Gem::Requirement
83
64
  none: false
84
65
  requirements:
85
66
  - - ! '>='
@@ -87,78 +68,80 @@ dependencies:
87
68
  version: '0'
88
69
  type: :development
89
70
  prerelease: false
90
- version_requirements: *87721520
91
- - !ruby/object:Gem::Dependency
92
- name: reek
93
- requirement: &87721210 !ruby/object:Gem::Requirement
94
- none: false
95
- requirements:
96
- - - ~>
97
- - !ruby/object:Gem::Version
98
- version: 1.2.8
99
- type: :development
100
- prerelease: false
101
- version_requirements: *87721210
102
- - !ruby/object:Gem::Dependency
103
- name: roodi
104
- requirement: &87720840 !ruby/object:Gem::Requirement
105
- none: false
106
- requirements:
107
- - - ~>
108
- - !ruby/object:Gem::Version
109
- version: 2.1.0
110
- type: :development
111
- prerelease: false
112
- version_requirements: *87720840
113
- description: Rubylog is an embedded Prolog language and interpreter for Ruby.
71
+ version_requirements: *80712570
72
+ description: Rubylog is a Prolog-like DSL for Ruby.
114
73
  email: kallo.bernat@gmail.com
115
- executables:
116
- - rubylog
74
+ executables: []
117
75
  extensions: []
118
76
  extra_rdoc_files:
119
77
  - LICENSE.txt
120
- - README.hu.rb
121
78
  - README.rdoc
79
+ - README.rdoc.orig
122
80
  files:
123
81
  - .document
124
82
  - .rspec
125
83
  - Gemfile
126
84
  - Gemfile.lock
127
85
  - LICENSE.txt
128
- - README.hu.rb
129
86
  - README.rdoc
87
+ - RELEASE_NOTES.rdoc
130
88
  - Rakefile
89
+ - TODO.txt
131
90
  - VERSION
132
- - bin/rubylog
91
+ - examples/a_plus_b.rb
92
+ - examples/checkmate.rb
93
+ - examples/combination.rb
133
94
  - examples/dcg.rb
134
95
  - examples/dcg2.rb
96
+ - examples/directory_structure_logic.rb
97
+ - examples/dirlist.rb
98
+ - examples/divisors.rb
135
99
  - examples/enumerators.rb
136
100
  - examples/factorial.rb
101
+ - examples/file_search.rb
137
102
  - examples/hanoi.rb
138
103
  - examples/hello.rb
104
+ - examples/mice.rb
105
+ - examples/mice2.rb
106
+ - examples/n_queens.rb
107
+ - examples/object_oriented.rb
108
+ - examples/palindrome_detection.rb
139
109
  - examples/parsing.rb
110
+ - examples/permutation.rb
111
+ - examples/prefix.rb
112
+ - examples/primality_by_division.rb
140
113
  - examples/primitives.rb
141
- - examples/theory.rb
114
+ - examples/sieve_of_eratosthenes.rb
115
+ - examples/string_interpolation.rb
116
+ - examples/sudoku.rb
117
+ - examples/tracing.rb
118
+ - lib/rspec/rubylog.rb
142
119
  - lib/rubylog.rb
143
- - lib/rubylog/builtins/default.rb
120
+ - lib/rubylog/assertable.rb
121
+ - lib/rubylog/builtins.rb
122
+ - lib/rubylog/builtins/arithmetics.rb
123
+ - lib/rubylog/builtins/assumption.rb
124
+ - lib/rubylog/builtins/ensure.rb
144
125
  - lib/rubylog/builtins/file_system.rb
145
126
  - lib/rubylog/builtins/logic.rb
146
127
  - lib/rubylog/builtins/reflection.rb
147
128
  - lib/rubylog/builtins/term.rb
148
- - lib/rubylog/dsl.rb
129
+ - lib/rubylog/clause.rb
130
+ - lib/rubylog/compound_term.rb
131
+ - lib/rubylog/context.rb
132
+ - lib/rubylog/context_creation.rb
133
+ - lib/rubylog/context_modules/checks.rb
134
+ - lib/rubylog/context_modules/demonstration.rb
135
+ - lib/rubylog/context_modules/predicates.rb
136
+ - lib/rubylog/context_modules/primitives.rb
137
+ - lib/rubylog/context_modules/thats.rb
138
+ - lib/rubylog/default_context.rb
149
139
  - lib/rubylog/dsl/array_splat.rb
150
140
  - lib/rubylog/dsl/primitives.rb
151
141
  - lib/rubylog/dsl/thats.rb
152
142
  - lib/rubylog/dsl/variables.rb
153
143
  - lib/rubylog/errors.rb
154
- - lib/rubylog/interfaces/assertable.rb
155
- - lib/rubylog/interfaces/callable.rb
156
- - lib/rubylog/interfaces/composite_term.rb
157
- - lib/rubylog/interfaces/predicate.rb
158
- - lib/rubylog/interfaces/procedure.rb
159
- - lib/rubylog/interfaces/term.rb
160
144
  - lib/rubylog/mixins/array.rb
161
- - lib/rubylog/mixins/class.rb
162
145
  - lib/rubylog/mixins/hash.rb
163
146
  - lib/rubylog/mixins/kernel.rb
164
147
  - lib/rubylog/mixins/method.rb
@@ -166,45 +149,16 @@ files:
166
149
  - lib/rubylog/mixins/proc.rb
167
150
  - lib/rubylog/mixins/string.rb
168
151
  - lib/rubylog/mixins/symbol.rb
169
- - lib/rubylog/simple_procedure.rb
152
+ - lib/rubylog/nullary_predicates.rb
153
+ - lib/rubylog/predicate.rb
154
+ - lib/rubylog/primitive.rb
155
+ - lib/rubylog/procedure.rb
156
+ - lib/rubylog/rule.rb
170
157
  - lib/rubylog/structure.rb
171
- - lib/rubylog/theory.rb
158
+ - lib/rubylog/term.rb
159
+ - lib/rubylog/tracing.rb
172
160
  - lib/rubylog/variable.rb
173
- - logic/builtins/file_system_logic.rb
174
- - logic/builtins/reflection_logic.rb
175
- - logic/dereference_logic.rb
176
- - logic/directory_structure_logic.rb
177
- - logic/dsl_logic.rb
178
- - logic/errors_logic.rb
179
- - logic/guard_logic.rb
180
- - logic/list_logic.rb
181
- - logic/map_logic.rb
182
- - logic/multitheory.rb
183
- - logic/recursion_logic.rb
184
- - logic/string_logic.rb
185
- - logic/thats_logic.rb
186
- - logic/variable_logic.rb
187
161
  - rubylog.gemspec
188
- - spec/bartak_guide_spec.rb
189
- - spec/builtins/all_spec.rb
190
- - spec/builtins/and_spec.rb
191
- - spec/builtins/array_spec.rb
192
- - spec/builtins/branch_or_spec.rb
193
- - spec/builtins/cut_spec.rb
194
- - spec/builtins/fail_spec.rb
195
- - spec/builtins/false_spec.rb
196
- - spec/builtins/in_spec.rb
197
- - spec/builtins/is_false_spec.rb
198
- - spec/builtins/is_spec.rb
199
- - spec/builtins/matches_spec.rb
200
- - spec/builtins/or_spec.rb
201
- - spec/builtins/splits_to.rb
202
- - spec/builtins/then_spec.rb
203
- - spec/builtins/true_spec.rb
204
- - spec/clause_spec.rb
205
- - spec/compilation_spec.rb
206
- - spec/custom_classes_spec.rb
207
- - spec/dereference.rb
208
162
  - spec/inriasuite/README
209
163
  - spec/inriasuite/abolish
210
164
  - spec/inriasuite/and
@@ -273,14 +227,40 @@ files:
273
227
  - spec/inriasuite/true
274
228
  - spec/inriasuite/unify
275
229
  - spec/inriasuite_spec.rb
276
- - spec/queries_spec.rb
277
- - spec/recursion_spec.rb
278
- - spec/ruby_code_spec.rb
279
- - spec/rules_spec.rb
230
+ - spec/integration/custom_classes_spec.rb
231
+ - spec/integration/dsl_spec.rb
232
+ - spec/integration/recursion_spec.rb
233
+ - spec/integration/theory_as_module_spec.rb
234
+ - spec/integration/theory_as_module_with_include_spec.rb
235
+ - spec/rspec/rubylog_spec.rb
236
+ - spec/rubylog/assertable_spec.rb
237
+ - spec/rubylog/builtins/arithmetics_spec.rb
238
+ - spec/rubylog/builtins/assumption_spec.rb
239
+ - spec/rubylog/builtins/ensure_spec.rb
240
+ - spec/rubylog/builtins/file_system_spec.rb
241
+ - spec/rubylog/builtins/logic_spec.rb
242
+ - spec/rubylog/builtins/reflection_spec.rb
243
+ - spec/rubylog/builtins/term_spec.rb
244
+ - spec/rubylog/context_modules/demonstration_spec.rb
245
+ - spec/rubylog/context_modules/predicates_spec.rb
246
+ - spec/rubylog/context_modules/thats_spec.rb
247
+ - spec/rubylog/dsl/array_splat_spec.rb
248
+ - spec/rubylog/dsl/primitives_spec.rb
249
+ - spec/rubylog/errors_spec.rb
250
+ - spec/rubylog/interfaces/term_spec.rb
251
+ - spec/rubylog/mixins/array_spec.rb
252
+ - spec/rubylog/mixins/composite_term_spec.rb
253
+ - spec/rubylog/mixins/proc_spec.rb
254
+ - spec/rubylog/mixins/string_spec.rb
255
+ - spec/rubylog/mixins/symbol_spec.rb
256
+ - spec/rubylog/structure_spec.rb
257
+ - spec/rubylog/term_spec.rb
258
+ - spec/rubylog/tracing_spec.input
259
+ - spec/rubylog/tracing_spec.rb
260
+ - spec/rubylog/variable_spec.rb
280
261
  - spec/spec_helper.rb
281
- - spec/theory_spec.rb
282
- - spec/unification_spec.rb
283
- - spec/variable_spec.rb
262
+ - vimrc
263
+ - README.rdoc.orig
284
264
  homepage: https://github.com/cie/rubylog
285
265
  licenses:
286
266
  - MIT
@@ -296,17 +276,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
296
276
  version: '0'
297
277
  segments:
298
278
  - 0
299
- hash: -824234275
279
+ hash: 34493633
300
280
  required_rubygems_version: !ruby/object:Gem::Requirement
301
281
  none: false
302
282
  requirements:
303
- - - ! '>='
283
+ - - ! '>'
304
284
  - !ruby/object:Gem::Version
305
- version: '0'
285
+ version: 1.3.1
306
286
  requirements: []
307
287
  rubyforge_project:
308
288
  rubygems_version: 1.8.15
309
289
  signing_key:
310
290
  specification_version: 3
311
- summary: An embedded Prolog interpreter
291
+ summary: A Prolog-like DSL
312
292
  test_files: []
data/README.hu.rb DELETED
@@ -1,58 +0,0 @@
1
- # Rubylog
2
-
3
- # A Rubylog a Prologhoz hasonló programozási nyelv.
4
-
5
- # A Prolog program alapköve a funktorból és argumentumokból álló term:
6
- likes("John", "beer")
7
-
8
- # A Rubylog programban a funktor az első argumentum után áll:
9
- "John".likes("beer")
10
-
11
- # A prolog programot tények és szabályok alkotják.
12
- likes("John", "beer").
13
- drinks(X,D) :- likes(X,D).
14
-
15
- # Rubylogban hasonlóan, a tényeket ! jelzi, a szabályokat 'if'
16
- "John".likes! "beer"
17
- X.drinks(D).if X.likes(D)
18
-
19
- # A nulláris predikátumok a Rubylogban szimbólumok:
20
- :true
21
- :fail
22
- :cut!
23
-
24
- # A Prolog operátorok helyett Rubylogban sokszor szavakat használunk:
25
- # Prolog Rubylog
26
- :- if
27
- , and
28
- ; or
29
- \+ false
30
- = is
31
-
32
- # A jobb hangzás érdekében néhány Prolog beépített predikátum neve más
33
- # Rubylogban
34
- # Prolog Rubylog
35
- member in
36
- # HAsonlít de többet tud
37
-
38
- # Vannak
39
- all
40
- any
41
- one
42
- none
43
-
44
- # Reflection
45
- list structure follows_from
46
-
47
-
48
- # Azért nem vezettünk be
49
- {a:b}.is {a}
50
- {}.isnt {a:b}
51
- # -t, mert akkor nem lenne kummutatív az unifikáció, és az egyáltalán nem POLA.
52
- # Azért nem vezettünk be
53
- {a:b}.is {}
54
- # -t, mert az nagyon bonyolult, és nem POLA. Ezért marad
55
- {a:b}.is {a:b}
56
- # és lehet
57
- {a:b}.merge!(X)
58
- # akár.