rubylog 1.0.0 → 2.0pre1

Sign up to get free protection for your applications and to get access to all the features.
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.