rubylog 0.0.1 → 1.0.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 (122) hide show
  1. data/Gemfile +1 -1
  2. data/README.hu.rb +58 -0
  3. data/README.rdoc +248 -89
  4. data/Rakefile +6 -1
  5. data/VERSION +1 -1
  6. data/bin/rubylog +18 -0
  7. data/examples/dcg.rb +35 -0
  8. data/examples/dcg2.rb +42 -0
  9. data/examples/enumerators.rb +30 -0
  10. data/examples/factorial.rb +9 -8
  11. data/examples/hanoi.rb +24 -0
  12. data/examples/hello.rb +11 -5
  13. data/examples/parsing.rb +27 -0
  14. data/examples/primitives.rb +24 -0
  15. data/examples/theory.rb +22 -10
  16. data/lib/rubylog/builtins/default.rb +10 -0
  17. data/lib/rubylog/builtins/file_system.rb +15 -0
  18. data/lib/rubylog/builtins/logic.rb +109 -0
  19. data/lib/rubylog/builtins/reflection.rb +94 -0
  20. data/lib/rubylog/builtins/term.rb +47 -0
  21. data/lib/rubylog/dsl/array_splat.rb +25 -0
  22. data/lib/rubylog/dsl/primitives.rb +17 -0
  23. data/lib/rubylog/dsl/thats.rb +22 -0
  24. data/lib/rubylog/dsl/variables.rb +30 -0
  25. data/lib/rubylog/dsl.rb +35 -17
  26. data/lib/rubylog/errors.rb +19 -1
  27. data/lib/rubylog/interfaces/assertable.rb +16 -0
  28. data/lib/rubylog/interfaces/callable.rb +18 -0
  29. data/lib/rubylog/interfaces/composite_term.rb +47 -0
  30. data/lib/rubylog/interfaces/predicate.rb +8 -0
  31. data/lib/rubylog/interfaces/procedure.rb +60 -0
  32. data/lib/rubylog/interfaces/term.rb +41 -0
  33. data/lib/rubylog/mixins/array.rb +118 -0
  34. data/lib/{class.rb → rubylog/mixins/class.rb} +2 -2
  35. data/lib/rubylog/mixins/hash.rb +8 -0
  36. data/lib/rubylog/mixins/kernel.rb +5 -0
  37. data/lib/rubylog/mixins/method.rb +3 -0
  38. data/lib/rubylog/mixins/object.rb +8 -0
  39. data/lib/rubylog/mixins/proc.rb +37 -0
  40. data/lib/rubylog/mixins/string.rb +104 -0
  41. data/lib/rubylog/mixins/symbol.rb +44 -0
  42. data/lib/rubylog/simple_procedure.rb +8 -0
  43. data/lib/rubylog/{clause.rb → structure.rb} +32 -31
  44. data/lib/rubylog/theory.rb +368 -79
  45. data/lib/rubylog/variable.rb +102 -23
  46. data/lib/rubylog.rb +33 -25
  47. data/logic/builtins/file_system_logic.rb +23 -0
  48. data/logic/builtins/reflection_logic.rb +40 -0
  49. data/logic/dereference_logic.rb +23 -0
  50. data/logic/directory_structure_logic.rb +19 -0
  51. data/logic/dsl_logic.rb +29 -0
  52. data/logic/errors_logic.rb +9 -0
  53. data/logic/guard_logic.rb +115 -0
  54. data/logic/list_logic.rb +55 -0
  55. data/logic/map_logic.rb +15 -0
  56. data/logic/multitheory.rb +23 -0
  57. data/logic/recursion_logic.rb +12 -0
  58. data/logic/string_logic.rb +41 -0
  59. data/logic/thats_logic.rb +51 -0
  60. data/logic/variable_logic.rb +24 -0
  61. data/rubylog.gemspec +85 -46
  62. data/spec/bartak_guide_spec.rb +57 -62
  63. data/spec/builtins/all_spec.rb +99 -0
  64. data/spec/builtins/and_spec.rb +22 -0
  65. data/spec/builtins/array_spec.rb +16 -0
  66. data/spec/builtins/branch_or_spec.rb +27 -0
  67. data/spec/builtins/cut_spec.rb +44 -0
  68. data/spec/builtins/fail_spec.rb +5 -0
  69. data/spec/builtins/false_spec.rb +5 -0
  70. data/spec/builtins/in_spec.rb +38 -0
  71. data/spec/builtins/is_false_spec.rb +12 -0
  72. data/spec/builtins/is_spec.rb +26 -0
  73. data/spec/builtins/matches_spec.rb +23 -0
  74. data/spec/builtins/or_spec.rb +22 -0
  75. data/spec/{rubylog/builtins → builtins}/splits_to.rb +0 -0
  76. data/spec/builtins/then_spec.rb +27 -0
  77. data/spec/builtins/true_spec.rb +5 -0
  78. data/spec/clause_spec.rb +82 -0
  79. data/spec/compilation_spec.rb +61 -0
  80. data/spec/custom_classes_spec.rb +43 -0
  81. data/spec/dereference.rb +10 -0
  82. data/spec/{inriasuite.rb → inriasuite_spec.rb} +2 -9
  83. data/spec/queries_spec.rb +150 -0
  84. data/spec/recursion_spec.rb +4 -4
  85. data/spec/ruby_code_spec.rb +52 -0
  86. data/spec/rules_spec.rb +97 -0
  87. data/spec/spec_helper.rb +6 -2
  88. data/spec/theory_spec.rb +28 -0
  89. data/spec/unification_spec.rb +84 -0
  90. data/spec/variable_spec.rb +26 -0
  91. metadata +153 -180
  92. data/examples/4queens.rb +0 -10
  93. data/examples/calculation.rb +0 -12
  94. data/examples/concepts.rb +0 -46
  95. data/examples/fp.rb +0 -56
  96. data/examples/historia_de_espana.rb +0 -31
  97. data/examples/idea.rb +0 -143
  98. data/examples/lists.rb +0 -5
  99. data/examples/mechanika.rb +0 -409
  100. data/examples/parse.rb +0 -15
  101. data/lib/array.rb +0 -24
  102. data/lib/method.rb +0 -4
  103. data/lib/object.rb +0 -5
  104. data/lib/proc.rb +0 -4
  105. data/lib/rubylog/builtins.rb +0 -193
  106. data/lib/rubylog/callable.rb +0 -20
  107. data/lib/rubylog/composite_term.rb +0 -38
  108. data/lib/rubylog/dsl/constants.rb +0 -15
  109. data/lib/rubylog/dsl/first_order_functors.rb +0 -9
  110. data/lib/rubylog/dsl/global_functors.rb +0 -3
  111. data/lib/rubylog/dsl/second_order_functors.rb +0 -8
  112. data/lib/rubylog/internal_helpers.rb +0 -16
  113. data/lib/rubylog/predicate.rb +0 -34
  114. data/lib/rubylog/proc_method_additions.rb +0 -69
  115. data/lib/rubylog/term.rb +0 -20
  116. data/lib/rubylog/unifiable.rb +0 -19
  117. data/lib/symbol.rb +0 -35
  118. data/script/inriasuite2spec +0 -0
  119. data/script/inriasuite2spec.pl +0 -22
  120. data/spec/rubylog/clause_spec.rb +0 -81
  121. data/spec/rubylog/variable_spec.rb +0 -25
  122. data/spec/rubylog_spec.rb +0 -914
@@ -0,0 +1,84 @@
1
+ theory "Uni" do
2
+ subject Symbol
3
+ functor :likes
4
+ end
5
+
6
+ describe "unification" do
7
+ it "works for variables" do
8
+ result = false
9
+ A.rubylog_unify(12) { result = true }
10
+ result.should == true
11
+ end
12
+ it "works for used classes" do
13
+ result = false
14
+ :john.rubylog_unify(A) { result = true }
15
+ result.should == true
16
+ end
17
+ it "works for constants" do
18
+ result = false
19
+ :john.rubylog_unify(:john) { result = true }
20
+ result.should == true
21
+ end
22
+ it "fails for different constants" do
23
+ result = false
24
+ :john.rubylog_unify(:mary) { result = true }
25
+ result.should == false
26
+ end
27
+ it "works on clauses" do
28
+ result = false
29
+ (:john.likes :beer).rubylog_unify(A.likes B) { result = true }
30
+ result.should == true
31
+ end
32
+ it "works on clauses with equal values" do
33
+ result = false
34
+ (:john.likes :beer).rubylog_unify(:john.likes :beer) { result = true }
35
+ result.should == true
36
+ end
37
+ it "works on clauses with different values" do
38
+ result = false
39
+ (:john.likes :beer).rubylog_unify(:john.likes :milk) { result = true }
40
+ result.should == false
41
+ end
42
+ it "works on clauses with variables and equal values" do
43
+ result = false
44
+ (:john.likes :beer).rubylog_unify(X.likes :beer) { result = true }
45
+ result.should == true
46
+ end
47
+ it "works on clauses with variables and equal values #2" do
48
+ result = false
49
+ (:john.likes :beer).rubylog_unify(:john.likes DRINK) { result = true }
50
+ result.should == true
51
+ end
52
+ it "works on clauses with variables and different values" do
53
+ result = false
54
+ (:john.likes :beer).rubylog_unify(X.likes :milk) { result = true }
55
+ result.should == false
56
+ end
57
+ it "works on clauses with variables and different values #2" do
58
+ result = false
59
+ (:john.likes :beer).rubylog_unify(:jane.likes D) { result = true }
60
+ result.should == false
61
+ end
62
+
63
+ it "works on clauses with repeated variables #1" do
64
+ result = false
65
+ (A.likes A).rubylog_compile_variables.rubylog_unify(:john.likes :jane) { result = true }
66
+ result.should == false
67
+ (A.likes A).rubylog_compile_variables.rubylog_unify(:john.likes :john) { result = true }
68
+ result.should == true
69
+ end
70
+ it "works on clauses with repeated variables #1" do
71
+ result = false
72
+ (:john.likes :jane).rubylog_unify(A.likes(A).rubylog_compile_variables) { result = true }
73
+ result.should == false
74
+ (:john.likes :john).rubylog_unify(A.likes(A).rubylog_compile_variables) { result = true }
75
+ result.should == true
76
+ end
77
+
78
+ it "works for second-order variables" do
79
+ result = false
80
+ (:john.likes :beer).rubylog_unify(A) { result = true }
81
+ result.should == true
82
+ end
83
+
84
+ end
@@ -0,0 +1,26 @@
1
+ require 'rubylog'
2
+
3
+ theory "Vars" do
4
+ end
5
+ describe "variables" do
6
+ it "are undefined constants" do
7
+ [A, SomethingLong].each{|x|x.should be_kind_of Rubylog::Variable}
8
+ end
9
+
10
+ it "support ==" do
11
+ A.should == A
12
+ end
13
+
14
+ it "support eql?" do
15
+ A.should be_eql A
16
+ end
17
+
18
+ it "returns different instances" do
19
+ A.should_not be_equal A
20
+ end
21
+
22
+ specify "that start with ANY... are dont care" do
23
+ [ANY, ANYTHING, ANYTIME].each{|x|x.should be_kind_of Rubylog::Variable; x.should be_dont_care}
24
+ [NOBODY, EVERYBODY, SOMEBODY].each{|x|x.should be_kind_of Rubylog::Variable; x.should_not be_dont_care}
25
+ end
26
+ end
metadata CHANGED
@@ -1,230 +1,210 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: rubylog
3
- version: !ruby/object:Gem::Version
4
- hash: 29
5
- prerelease: false
6
- segments:
7
- - 0
8
- - 0
9
- - 1
10
- segments_generated: true
11
- version: 0.0.1
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ prerelease:
12
6
  platform: ruby
13
- authors:
14
- - "Bern\xC3\xA1t Kall\xC3\xB3"
7
+ authors:
8
+ - Bernát Kalló
15
9
  autorequire:
16
10
  bindir: bin
17
11
  cert_chain: []
18
-
19
- date: 2012-02-07 00:00:00 +01:00
20
- default_executable:
21
- dependencies:
22
- - !ruby/object:Gem::Dependency
23
- prerelease: false
12
+ date: 2013-02-27 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
24
15
  name: rspec
25
- version_requirements: &id001 !ruby/object:Gem::Requirement
16
+ requirement: &87769710 !ruby/object:Gem::Requirement
26
17
  none: false
27
- requirements:
18
+ requirements:
28
19
  - - ~>
29
- - !ruby/object:Gem::Version
30
- hash: 47
31
- segments:
32
- - 2
33
- - 8
34
- - 0
35
- segments_generated: true
20
+ - !ruby/object:Gem::Version
36
21
  version: 2.8.0
37
- requirement: *id001
38
22
  type: :development
39
- - !ruby/object:Gem::Dependency
40
23
  prerelease: false
24
+ version_requirements: *87769710
25
+ - !ruby/object:Gem::Dependency
41
26
  name: yard
42
- version_requirements: &id002 !ruby/object:Gem::Requirement
27
+ requirement: &87769290 !ruby/object:Gem::Requirement
43
28
  none: false
44
- requirements:
29
+ requirements:
45
30
  - - ~>
46
- - !ruby/object:Gem::Version
47
- hash: 5
48
- segments:
49
- - 0
50
- - 7
51
- segments_generated: true
52
- version: "0.7"
53
- requirement: *id002
31
+ - !ruby/object:Gem::Version
32
+ version: '0.7'
54
33
  type: :development
55
- - !ruby/object:Gem::Dependency
56
34
  prerelease: false
35
+ version_requirements: *87769290
36
+ - !ruby/object:Gem::Dependency
57
37
  name: rdoc
58
- version_requirements: &id003 !ruby/object:Gem::Requirement
38
+ requirement: &87768850 !ruby/object:Gem::Requirement
59
39
  none: false
60
- requirements:
40
+ requirements:
61
41
  - - ~>
62
- - !ruby/object:Gem::Version
63
- hash: 31
64
- segments:
65
- - 3
66
- - 12
67
- segments_generated: true
68
- version: "3.12"
69
- requirement: *id003
42
+ - !ruby/object:Gem::Version
43
+ version: '3.12'
70
44
  type: :development
71
- - !ruby/object:Gem::Dependency
72
45
  prerelease: false
46
+ version_requirements: *87768850
47
+ - !ruby/object:Gem::Dependency
73
48
  name: cucumber
74
- version_requirements: &id004 !ruby/object:Gem::Requirement
49
+ requirement: &87722730 !ruby/object:Gem::Requirement
75
50
  none: false
76
- requirements:
77
- - - ">="
78
- - !ruby/object:Gem::Version
79
- hash: 3
80
- segments:
81
- - 0
82
- segments_generated: true
83
- version: "0"
84
- requirement: *id004
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
85
55
  type: :development
86
- - !ruby/object:Gem::Dependency
87
56
  prerelease: false
57
+ version_requirements: *87722730
58
+ - !ruby/object:Gem::Dependency
88
59
  name: bundler
89
- version_requirements: &id005 !ruby/object:Gem::Requirement
60
+ requirement: &87722330 !ruby/object:Gem::Requirement
90
61
  none: false
91
- requirements:
62
+ requirements:
92
63
  - - ~>
93
- - !ruby/object:Gem::Version
94
- hash: 23
95
- segments:
96
- - 1
97
- - 0
98
- - 0
99
- segments_generated: true
64
+ - !ruby/object:Gem::Version
100
65
  version: 1.0.0
101
- requirement: *id005
102
66
  type: :development
103
- - !ruby/object:Gem::Dependency
104
67
  prerelease: false
68
+ version_requirements: *87722330
69
+ - !ruby/object:Gem::Dependency
105
70
  name: jeweler
106
- version_requirements: &id006 !ruby/object:Gem::Requirement
71
+ requirement: &87721950 !ruby/object:Gem::Requirement
107
72
  none: false
108
- requirements:
73
+ requirements:
109
74
  - - ~>
110
- - !ruby/object:Gem::Version
111
- hash: 49
112
- segments:
113
- - 1
114
- - 8
115
- - 3
116
- segments_generated: true
75
+ - !ruby/object:Gem::Version
117
76
  version: 1.8.3
118
- requirement: *id006
119
77
  type: :development
120
- - !ruby/object:Gem::Dependency
121
78
  prerelease: false
79
+ version_requirements: *87721950
80
+ - !ruby/object:Gem::Dependency
122
81
  name: simplecov
123
- version_requirements: &id007 !ruby/object:Gem::Requirement
82
+ requirement: &87721520 !ruby/object:Gem::Requirement
124
83
  none: false
125
- requirements:
126
- - - ">="
127
- - !ruby/object:Gem::Version
128
- hash: 3
129
- segments:
130
- - 0
131
- segments_generated: true
132
- version: "0"
133
- requirement: *id007
84
+ requirements:
85
+ - - ! '>='
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
134
88
  type: :development
135
- - !ruby/object:Gem::Dependency
136
89
  prerelease: false
90
+ version_requirements: *87721520
91
+ - !ruby/object:Gem::Dependency
137
92
  name: reek
138
- version_requirements: &id008 !ruby/object:Gem::Requirement
93
+ requirement: &87721210 !ruby/object:Gem::Requirement
139
94
  none: false
140
- requirements:
95
+ requirements:
141
96
  - - ~>
142
- - !ruby/object:Gem::Version
143
- hash: 15
144
- segments:
145
- - 1
146
- - 2
147
- - 8
148
- segments_generated: true
97
+ - !ruby/object:Gem::Version
149
98
  version: 1.2.8
150
- requirement: *id008
151
99
  type: :development
152
- - !ruby/object:Gem::Dependency
153
100
  prerelease: false
101
+ version_requirements: *87721210
102
+ - !ruby/object:Gem::Dependency
154
103
  name: roodi
155
- version_requirements: &id009 !ruby/object:Gem::Requirement
104
+ requirement: &87720840 !ruby/object:Gem::Requirement
156
105
  none: false
157
- requirements:
106
+ requirements:
158
107
  - - ~>
159
- - !ruby/object:Gem::Version
160
- hash: 11
161
- segments:
162
- - 2
163
- - 1
164
- - 0
165
- segments_generated: true
108
+ - !ruby/object:Gem::Version
166
109
  version: 2.1.0
167
- requirement: *id009
168
110
  type: :development
111
+ prerelease: false
112
+ version_requirements: *87720840
169
113
  description: Rubylog is an embedded Prolog language and interpreter for Ruby.
170
114
  email: kallo.bernat@gmail.com
171
- executables: []
172
-
115
+ executables:
116
+ - rubylog
173
117
  extensions: []
174
-
175
- extra_rdoc_files:
118
+ extra_rdoc_files:
176
119
  - LICENSE.txt
120
+ - README.hu.rb
177
121
  - README.rdoc
178
- files:
122
+ files:
179
123
  - .document
180
124
  - .rspec
181
125
  - Gemfile
182
126
  - Gemfile.lock
183
127
  - LICENSE.txt
128
+ - README.hu.rb
184
129
  - README.rdoc
185
130
  - Rakefile
186
131
  - VERSION
187
- - examples/4queens.rb
188
- - examples/calculation.rb
189
- - examples/concepts.rb
132
+ - bin/rubylog
133
+ - examples/dcg.rb
134
+ - examples/dcg2.rb
135
+ - examples/enumerators.rb
190
136
  - examples/factorial.rb
191
- - examples/fp.rb
137
+ - examples/hanoi.rb
192
138
  - examples/hello.rb
193
- - examples/historia_de_espana.rb
194
- - examples/idea.rb
195
- - examples/lists.rb
196
- - examples/mechanika.rb
197
- - examples/parse.rb
139
+ - examples/parsing.rb
140
+ - examples/primitives.rb
198
141
  - examples/theory.rb
199
- - lib/array.rb
200
- - lib/class.rb
201
- - lib/method.rb
202
- - lib/object.rb
203
- - lib/proc.rb
204
142
  - lib/rubylog.rb
205
- - lib/rubylog/builtins.rb
206
- - lib/rubylog/callable.rb
207
- - lib/rubylog/clause.rb
208
- - lib/rubylog/composite_term.rb
143
+ - lib/rubylog/builtins/default.rb
144
+ - lib/rubylog/builtins/file_system.rb
145
+ - lib/rubylog/builtins/logic.rb
146
+ - lib/rubylog/builtins/reflection.rb
147
+ - lib/rubylog/builtins/term.rb
209
148
  - lib/rubylog/dsl.rb
210
- - lib/rubylog/dsl/constants.rb
211
- - lib/rubylog/dsl/first_order_functors.rb
212
- - lib/rubylog/dsl/global_functors.rb
213
- - lib/rubylog/dsl/second_order_functors.rb
149
+ - lib/rubylog/dsl/array_splat.rb
150
+ - lib/rubylog/dsl/primitives.rb
151
+ - lib/rubylog/dsl/thats.rb
152
+ - lib/rubylog/dsl/variables.rb
214
153
  - lib/rubylog/errors.rb
215
- - lib/rubylog/internal_helpers.rb
216
- - lib/rubylog/predicate.rb
217
- - lib/rubylog/proc_method_additions.rb
218
- - lib/rubylog/term.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
+ - lib/rubylog/mixins/array.rb
161
+ - lib/rubylog/mixins/class.rb
162
+ - lib/rubylog/mixins/hash.rb
163
+ - lib/rubylog/mixins/kernel.rb
164
+ - lib/rubylog/mixins/method.rb
165
+ - lib/rubylog/mixins/object.rb
166
+ - lib/rubylog/mixins/proc.rb
167
+ - lib/rubylog/mixins/string.rb
168
+ - lib/rubylog/mixins/symbol.rb
169
+ - lib/rubylog/simple_procedure.rb
170
+ - lib/rubylog/structure.rb
219
171
  - lib/rubylog/theory.rb
220
- - lib/rubylog/unifiable.rb
221
172
  - lib/rubylog/variable.rb
222
- - lib/symbol.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
223
187
  - rubylog.gemspec
224
- - script/inriasuite2spec
225
- - script/inriasuite2spec.pl
226
188
  - spec/bartak_guide_spec.rb
227
- - spec/inriasuite.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
228
208
  - spec/inriasuite/README
229
209
  - spec/inriasuite/abolish
230
210
  - spec/inriasuite/and
@@ -292,48 +272,41 @@ files:
292
272
  - spec/inriasuite/term_lt=
293
273
  - spec/inriasuite/true
294
274
  - spec/inriasuite/unify
275
+ - spec/inriasuite_spec.rb
276
+ - spec/queries_spec.rb
295
277
  - spec/recursion_spec.rb
296
- - spec/rubylog/builtins/splits_to.rb
297
- - spec/rubylog/clause_spec.rb
298
- - spec/rubylog/variable_spec.rb
299
- - spec/rubylog_spec.rb
278
+ - spec/ruby_code_spec.rb
279
+ - spec/rules_spec.rb
300
280
  - spec/spec_helper.rb
301
281
  - spec/theory_spec.rb
302
- has_rdoc: true
282
+ - spec/unification_spec.rb
283
+ - spec/variable_spec.rb
303
284
  homepage: https://github.com/cie/rubylog
304
- licenses:
285
+ licenses:
305
286
  - MIT
306
287
  post_install_message:
307
288
  rdoc_options: []
308
-
309
- require_paths:
289
+ require_paths:
310
290
  - lib
311
- required_ruby_version: !ruby/object:Gem::Requirement
291
+ required_ruby_version: !ruby/object:Gem::Requirement
312
292
  none: false
313
- requirements:
314
- - - ">="
315
- - !ruby/object:Gem::Version
316
- hash: 3
317
- segments:
293
+ requirements:
294
+ - - ! '>='
295
+ - !ruby/object:Gem::Version
296
+ version: '0'
297
+ segments:
318
298
  - 0
319
- segments_generated: true
320
- version: "0"
321
- required_rubygems_version: !ruby/object:Gem::Requirement
299
+ hash: -824234275
300
+ required_rubygems_version: !ruby/object:Gem::Requirement
322
301
  none: false
323
- requirements:
324
- - - ">="
325
- - !ruby/object:Gem::Version
326
- hash: 3
327
- segments:
328
- - 0
329
- segments_generated: true
330
- version: "0"
302
+ requirements:
303
+ - - ! '>='
304
+ - !ruby/object:Gem::Version
305
+ version: '0'
331
306
  requirements: []
332
-
333
307
  rubyforge_project:
334
- rubygems_version: 1.3.7
308
+ rubygems_version: 1.8.15
335
309
  signing_key:
336
310
  specification_version: 3
337
311
  summary: An embedded Prolog interpreter
338
312
  test_files: []
339
-
data/examples/4queens.rb DELETED
@@ -1,10 +0,0 @@
1
- require "rubylog"
2
-
3
- Rubylog.use :variables, :implicit_predicates, String, Numeric
4
-
5
- 4.queens!
6
-
7
- 0.queens! []
8
- N.queens
9
-
10
-
@@ -1,12 +0,0 @@
1
- require 'rubylog'
2
-
3
- Rubylog.use :variables, :implicit_predicates, String
4
-
5
- Rubylog::Theory.new do
6
- A.write.if {|a| puts a or true}
7
- :hello.if "Hello, world!".write
8
- :hello.prove
9
- end
10
-
11
-
12
-
data/examples/concepts.rb DELETED
@@ -1,46 +0,0 @@
1
-
2
- X.clause.if X.fact
3
- X.clause.if X.rule
4
- X.clause.if X.query
5
-
6
- X.comment.if X.starts_with('%')
7
-
8
- X.predicate.if X.procedure
9
-
10
- X.procedure.if X.has_many(clause)
11
-
12
-
13
- X.operator.if X.comparison_operator
14
- X.operator.if X.arithmetic_operator
15
-
16
- X.comparison_operator.if X.arithmetic_comparison_operator.or X.unification_style_operator
17
-
18
- X.unification_style_operator.if X === :===
19
- X.unification_style_operator.if X === :==
20
-
21
- X.arithmetic_comparison_operator.if X === :<
22
- X.arithmetic_comparison_operator.if X === :<=
23
- X.arithmetic_comparison_operator.if X === :>
24
- X.arithmetic_comparison_operator.if X === :>=
25
-
26
- X.arithmetic_operator.if X === :+
27
- X.arithmetic_operator.if X === :-
28
- X.arithmetic_operator.if X === :-@
29
- X.arithmetic_operator.if X === :*
30
- X.arithmetic_operator.if X === :/
31
- X.arithmetic_operator.if X === :%
32
- X.arithmetic_operator.if X === :**
33
- X.arithmetic_operator.if X === :<=>
34
- X.arithmetic_operator.if X === :&
35
- X.arithmetic_operator.if X === :|
36
- X.arithmetic_operator.if X === :^
37
- X.arithmetic_operator.if X === :~
38
- X.arithmetic_operator.if X === :<<
39
- X.arithmetic_operator.if X === :>>
40
-
41
-
42
-
43
-
44
- X.builtin.if X === :arg
45
- X.builtin.if X === :forget
46
-
data/examples/fp.rb DELETED
@@ -1,56 +0,0 @@
1
- =begin
2
-
3
- This is a port of some little Haskell programs
4
-
5
-
6
-
7
-
8
-
9
- zipPair :: ([a],[b]) -> [(a,b)]
10
- -- zipPair = uncurry zip
11
- zipPair (_,[]) = []
12
- zipPair ([],_) = []
13
- zipPair ((a:as), (b:bs)) = (a,b) : zipPair (as,bs)
14
-
15
- =end
16
-
17
- class << Rubylog::Theory.new!
18
-
19
- rubylog_functor
20
-
21
- # multiply 0 _ = []
22
- # multiply n k = k : multiply (n-1) k
23
- #
24
- (N.times X, XS).if XS.is{|n,x| n*[x] }
25
-
26
-
27
- # dividers n = filter (`divides` n) [1..n `div` 2]
28
- # where a `divides` b = b `mod` a == 0
29
- # isPerfectNumber n = n == (sum $ dividers n)
30
-
31
- (A.divides B).if {|a,b| b % a == 0}
32
- (A.divider_of B).if A.in{|a,b| (1..b%2)}.and A.divides B
33
- (N.perfect_number).if DS.is{|n| (D.divider_of n).to_a }.and DS.sum N
34
- (L.sum S).if S.is{|l| l.inject(0){|a,b|a+b}}
35
-
36
-
37
-
38
- # mirrorList [] = []
39
- # mirrorList (a:as) = mirrorList as ++ [a]
40
- (L.mirrored M).if M.is{|l|l.reverse}
41
-
42
-
43
- # intermix [] _ = []
44
- # intermix [a] _ = [a]
45
- # intermix (a:as) b = a:b:intermix as b
46
- (L.intermix E, M).if M.is{|l,e|l[1..-1].inject [l[0]] {|a,b| a << e << b }}
47
- # possible:
48
- #([].intermix ANY, [])
49
- #([A].intermix ANY, [A])
50
- #((:|[A,AS]).intermix B, :|[A,B,L]).if (AS.intermix B, L)
51
-
52
-
53
- end
54
-
55
-
56
-