porolog 0.0.4 → 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 (44) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +30 -5
  3. data/Rakefile +7 -2
  4. data/bin/porolog +58 -1
  5. data/coverage/badge.svg +1 -1
  6. data/coverage/index.html +76733 -2638
  7. data/doc/Array.html +1066 -0
  8. data/doc/Object.html +674 -0
  9. data/doc/Porolog.html +4153 -74
  10. data/doc/Symbol.html +501 -0
  11. data/doc/_index.html +280 -6
  12. data/doc/class_list.html +1 -1
  13. data/doc/file.README.html +34 -39
  14. data/doc/index.html +34 -39
  15. data/doc/method_list.html +1337 -57
  16. data/doc/top-level-namespace.html +4 -2
  17. data/lib/porolog.rb +1144 -4
  18. data/lib/porolog/arguments.rb +28 -24
  19. data/lib/porolog/core_ext.rb +188 -0
  20. data/lib/porolog/error.rb +9 -0
  21. data/lib/porolog/goal.rb +357 -0
  22. data/lib/porolog/instantiation.rb +346 -0
  23. data/lib/porolog/predicate.rb +74 -31
  24. data/lib/porolog/predicate/builtin.rb +825 -0
  25. data/lib/porolog/rule.rb +162 -0
  26. data/lib/porolog/scope.rb +4 -4
  27. data/lib/porolog/tail.rb +57 -0
  28. data/lib/porolog/value.rb +105 -0
  29. data/lib/porolog/variable.rb +325 -0
  30. data/test/porolog/arguments_test.rb +244 -195
  31. data/test/porolog/core_ext_test.rb +290 -0
  32. data/test/porolog/goal_test.rb +891 -0
  33. data/test/porolog/instantiation_test.rb +910 -0
  34. data/test/porolog/porolog_test.rb +2376 -13
  35. data/test/porolog/predicate/builtin_test.rb +1340 -0
  36. data/test/porolog/predicate_test.rb +84 -30
  37. data/test/porolog/rule_test.rb +527 -0
  38. data/test/porolog/scope_test.rb +0 -2
  39. data/test/porolog/tail_test.rb +127 -0
  40. data/test/porolog/value_test.rb +315 -0
  41. data/test/porolog/variable_test.rb +1614 -0
  42. data/test/samples_test.rb +277 -0
  43. data/test/test_helper.rb +115 -0
  44. metadata +34 -7
@@ -87,10 +87,171 @@
87
87
 
88
88
  </li>
89
89
 
90
+ <li>
91
+ <span class='object_link'><a href="Array.html" title="Array (class)">Array</a></span>
92
+
93
+ </li>
94
+
95
+ </ul>
96
+ </ul>
97
+
98
+
99
+ <ul id="alpha_B" class="alpha">
100
+ <li class="letter">B</li>
101
+ <ul>
102
+
103
+ <li>
104
+ <span class='object_link'><a href="Porolog/Predicate/Builtin.html" title="Porolog::Predicate::Builtin (module)">Builtin</a></span>
105
+
106
+ <small>(Porolog::Predicate)</small>
107
+
108
+ </li>
109
+
110
+ </ul>
111
+ </ul>
112
+
113
+
114
+ <ul id="alpha_D" class="alpha">
115
+ <li class="letter">D</li>
116
+ <ul>
117
+
118
+ <li>
119
+ <span class='object_link'><a href="Porolog/Goal/DefinitionError.html" title="Porolog::Goal::DefinitionError (class)">DefinitionError</a></span>
120
+
121
+ <small>(Porolog::Goal)</small>
122
+
123
+ </li>
124
+
125
+ <li>
126
+ <span class='object_link'><a href="Porolog/Rule/DefinitionError.html" title="Porolog::Rule::DefinitionError (class)">DefinitionError</a></span>
127
+
128
+ <small>(Porolog::Rule)</small>
129
+
130
+ </li>
131
+
132
+ </ul>
133
+ </ul>
134
+
135
+
136
+ <ul id="alpha_E" class="alpha">
137
+ <li class="letter">E</li>
138
+ <ul>
139
+
140
+ <li>
141
+ <span class='object_link'><a href="Porolog/Variable/Error.html" title="Porolog::Variable::Error (class)">Error</a></span>
142
+
143
+ <small>(Porolog::Variable)</small>
144
+
145
+ </li>
146
+
147
+ <li>
148
+ <span class='object_link'><a href="Porolog/Scope/Error.html" title="Porolog::Scope::Error (class)">Error</a></span>
149
+
150
+ <small>(Porolog::Scope)</small>
151
+
152
+ </li>
153
+
154
+ <li>
155
+ <span class='object_link'><a href="Porolog/Value/Error.html" title="Porolog::Value::Error (class)">Error</a></span>
156
+
157
+ <small>(Porolog::Value)</small>
158
+
159
+ </li>
160
+
161
+ <li>
162
+ <span class='object_link'><a href="Porolog/Goal/Error.html" title="Porolog::Goal::Error (class)">Error</a></span>
163
+
164
+ <small>(Porolog::Goal)</small>
165
+
166
+ </li>
167
+
168
+ <li>
169
+ <span class='object_link'><a href="Porolog/Instantiation/Error.html" title="Porolog::Instantiation::Error (class)">Error</a></span>
170
+
171
+ <small>(Porolog::Instantiation)</small>
172
+
173
+ </li>
174
+
175
+ <li>
176
+ <span class='object_link'><a href="Porolog/Rule/Error.html" title="Porolog::Rule::Error (class)">Error</a></span>
177
+
178
+ <small>(Porolog::Rule)</small>
179
+
180
+ </li>
181
+
182
+ <li>
183
+ <span class='object_link'><a href="Porolog/Predicate/Error.html" title="Porolog::Predicate::Error (class)">Error</a></span>
184
+
185
+ <small>(Porolog::Predicate)</small>
186
+
187
+ </li>
188
+
189
+ </ul>
190
+ </ul>
191
+
192
+
193
+ <ul id="alpha_G" class="alpha">
194
+ <li class="letter">G</li>
195
+ <ul>
196
+
197
+ <li>
198
+ <span class='object_link'><a href="Porolog/Goal.html" title="Porolog::Goal (class)">Goal</a></span>
199
+
200
+ <small>(Porolog)</small>
201
+
202
+ </li>
203
+
204
+ <li>
205
+ <span class='object_link'><a href="Porolog/Value/GoalError.html" title="Porolog::Value::GoalError (class)">GoalError</a></span>
206
+
207
+ <small>(Porolog::Value)</small>
208
+
209
+ </li>
210
+
211
+ <li>
212
+ <span class='object_link'><a href="Porolog/Variable/GoalError.html" title="Porolog::Variable::GoalError (class)">GoalError</a></span>
213
+
214
+ <small>(Porolog::Variable)</small>
215
+
216
+ </li>
217
+
218
+ </ul>
219
+ </ul>
220
+
221
+
222
+ <ul id="alpha_I" class="alpha">
223
+ <li class="letter">I</li>
224
+ <ul>
225
+
226
+ <li>
227
+ <span class='object_link'><a href="Porolog/Instantiation.html" title="Porolog::Instantiation (class)">Instantiation</a></span>
228
+
229
+ <small>(Porolog)</small>
230
+
231
+ </li>
232
+
233
+ </ul>
234
+ </ul>
235
+
236
+
237
+ <ul id="alpha_M" class="alpha">
238
+ <li class="letter">M</li>
239
+ <ul>
240
+
241
+ <li>
242
+ <span class='object_link'><a href="Porolog/Variable/MultipleValuesError.html" title="Porolog::Variable::MultipleValuesError (class)">MultipleValuesError</a></span>
243
+
244
+ <small>(Porolog::Variable)</small>
245
+
246
+ </li>
247
+
90
248
  </ul>
91
249
  </ul>
92
250
 
93
251
 
252
+ </td><td valign='top' width="33%">
253
+
254
+
94
255
  <ul id="alpha_N" class="alpha">
95
256
  <li class="letter">N</li>
96
257
  <ul>
@@ -102,6 +263,27 @@
102
263
 
103
264
  </li>
104
265
 
266
+ <li>
267
+ <span class='object_link'><a href="Porolog/NoGoalError.html" title="Porolog::NoGoalError (class)">NoGoalError</a></span>
268
+
269
+ <small>(Porolog)</small>
270
+
271
+ </li>
272
+
273
+ <li>
274
+ <span class='object_link'><a href="Porolog/Instantiation/NoVariableError.html" title="Porolog::Instantiation::NoVariableError (class)">NoVariableError</a></span>
275
+
276
+ <small>(Porolog::Instantiation)</small>
277
+
278
+ </li>
279
+
280
+ <li>
281
+ <span class='object_link'><a href="Porolog/NonVariableError.html" title="Porolog::NonVariableError (class)">NonVariableError</a></span>
282
+
283
+ <small>(Porolog)</small>
284
+
285
+ </li>
286
+
105
287
  <li>
106
288
  <span class='object_link'><a href="Porolog/Scope/NotPredicateError.html" title="Porolog::Scope::NotPredicateError (class)">NotPredicateError</a></span>
107
289
 
@@ -109,6 +291,26 @@
109
291
 
110
292
  </li>
111
293
 
294
+ <li>
295
+ <span class='object_link'><a href="Porolog/Goal/NotVariableError.html" title="Porolog::Goal::NotVariableError (class)">NotVariableError</a></span>
296
+
297
+ <small>(Porolog::Goal)</small>
298
+
299
+ </li>
300
+
301
+ </ul>
302
+ </ul>
303
+
304
+
305
+ <ul id="alpha_O" class="alpha">
306
+ <li class="letter">O</li>
307
+ <ul>
308
+
309
+ <li>
310
+ <span class='object_link'><a href="Object.html" title="Object (class)">Object</a></span>
311
+
312
+ </li>
313
+
112
314
  </ul>
113
315
  </ul>
114
316
 
@@ -136,10 +338,18 @@
136
338
 
137
339
  </li>
138
340
 
341
+ </ul>
342
+ </ul>
343
+
344
+
345
+ <ul id="alpha_R" class="alpha">
346
+ <li class="letter">R</li>
347
+ <ul>
348
+
139
349
  <li>
140
- <span class='object_link'><a href="Porolog/Predicate/PredicateError.html" title="Porolog::Predicate::PredicateError (class)">PredicateError</a></span>
350
+ <span class='object_link'><a href="Porolog/Rule.html" title="Porolog::Rule (class)">Rule</a></span>
141
351
 
142
- <small>(Porolog::Predicate)</small>
352
+ <small>(Porolog)</small>
143
353
 
144
354
  </li>
145
355
 
@@ -159,9 +369,73 @@
159
369
  </li>
160
370
 
161
371
  <li>
162
- <span class='object_link'><a href="Porolog/Scope/ScopeError.html" title="Porolog::Scope::ScopeError (class)">ScopeError</a></span>
372
+ <span class='object_link'><a href="Porolog/Variable/SelfReferentialError.html" title="Porolog::Variable::SelfReferentialError (class)">SelfReferentialError</a></span>
163
373
 
164
- <small>(Porolog::Scope)</small>
374
+ <small>(Porolog::Variable)</small>
375
+
376
+ </li>
377
+
378
+ <li>
379
+ <span class='object_link'><a href="Symbol.html" title="Symbol (class)">Symbol</a></span>
380
+
381
+ </li>
382
+
383
+ </ul>
384
+ </ul>
385
+
386
+
387
+ <ul id="alpha_T" class="alpha">
388
+ <li class="letter">T</li>
389
+ <ul>
390
+
391
+ <li>
392
+ <span class='object_link'><a href="Porolog/Tail.html" title="Porolog::Tail (class)">Tail</a></span>
393
+
394
+ <small>(Porolog)</small>
395
+
396
+ </li>
397
+
398
+ </ul>
399
+ </ul>
400
+
401
+
402
+ <ul id="alpha_U" class="alpha">
403
+ <li class="letter">U</li>
404
+ <ul>
405
+
406
+ <li>
407
+ <span class='object_link'><a href="Porolog/Variable/UnexpectedError.html" title="Porolog::Variable::UnexpectedError (class)">UnexpectedError</a></span>
408
+
409
+ <small>(Porolog::Variable)</small>
410
+
411
+ </li>
412
+
413
+ <li>
414
+ <span class='object_link'><a href="Porolog/Instantiation/UnhandledIndexError.html" title="Porolog::Instantiation::UnhandledIndexError (class)">UnhandledIndexError</a></span>
415
+
416
+ <small>(Porolog::Instantiation)</small>
417
+
418
+ </li>
419
+
420
+ </ul>
421
+ </ul>
422
+
423
+
424
+ <ul id="alpha_V" class="alpha">
425
+ <li class="letter">V</li>
426
+ <ul>
427
+
428
+ <li>
429
+ <span class='object_link'><a href="Porolog/Value.html" title="Porolog::Value (class)">Value</a></span>
430
+
431
+ <small>(Porolog)</small>
432
+
433
+ </li>
434
+
435
+ <li>
436
+ <span class='object_link'><a href="Porolog/Variable.html" title="Porolog::Variable (class)">Variable</a></span>
437
+
438
+ <small>(Porolog)</small>
165
439
 
166
440
  </li>
167
441
 
@@ -177,9 +451,9 @@
177
451
  </div>
178
452
 
179
453
  <div id="footer">
180
- Generated on Mon Apr 22 16:27:39 2019 by
454
+ Generated on Sun Aug 2 19:24:16 2020 by
181
455
  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
182
- 0.9.19 (ruby-2.3.4).
456
+ 0.9.19 (ruby-2.6.5).
183
457
  </div>
184
458
 
185
459
  </div>
@@ -43,7 +43,7 @@
43
43
 
44
44
  <ul id="full_list" class="class">
45
45
  <li id="object_" class="odd"><div class="item" style="padding-left:30px"><span class='object_link'><a href="top-level-namespace.html" title="Top Level Namespace (root)">Top Level Namespace</a></span></div></li>
46
- <li id='object_Porolog' class='even'><div class='item' style='padding-left:30px'><a class='toggle'></a> <span class='object_link'><a href="Porolog.html" title="Porolog (module)">Porolog</a></span><small class='search_info'>Top Level Namespace</small></div><ul><li id='object_Porolog::Arguments' class='collapsed odd'><div class='item' style='padding-left:45px'><span class='object_link'><a href="Porolog/Arguments.html" title="Porolog::Arguments (class)">Arguments</a></span> &lt; Object<small class='search_info'>Porolog</small></div></li><li id='object_Porolog::PorologError' class='collapsed even'><div class='item' style='padding-left:45px'><span class='object_link'><a href="Porolog/PorologError.html" title="Porolog::PorologError (class)">PorologError</a></span> &lt; RuntimeError<small class='search_info'>Porolog</small></div></li><li id='object_Porolog::Predicate' class='collapsed odd'><div class='item' style='padding-left:45px'><a class='toggle'></a> <span class='object_link'><a href="Porolog/Predicate.html" title="Porolog::Predicate (class)">Predicate</a></span> &lt; Object<small class='search_info'>Porolog</small></div><ul><li id='object_Porolog::Predicate::NameError' class='collapsed'><div class='item' style='padding-left:60px'><span class='object_link'><a href="Porolog/Predicate/NameError.html" title="Porolog::Predicate::NameError (class)">NameError</a></span> &lt; PredicateError<small class='search_info'>Porolog::Predicate</small></div></li><li id='object_Porolog::Predicate::PredicateError' class='collapsed'><div class='item' style='padding-left:60px'><span class='object_link'><a href="Porolog/Predicate/PredicateError.html" title="Porolog::Predicate::PredicateError (class)">PredicateError</a></span> &lt; PorologError<small class='search_info'>Porolog::Predicate</small></div></li></ul></li><li id='object_Porolog::Scope' class='collapsed even'><div class='item' style='padding-left:45px'><a class='toggle'></a> <span class='object_link'><a href="Porolog/Scope.html" title="Porolog::Scope (class)">Scope</a></span> &lt; Object<small class='search_info'>Porolog</small></div><ul><li id='object_Porolog::Scope::NotPredicateError' class='collapsed'><div class='item' style='padding-left:60px'><span class='object_link'><a href="Porolog/Scope/NotPredicateError.html" title="Porolog::Scope::NotPredicateError (class)">NotPredicateError</a></span> &lt; ScopeError<small class='search_info'>Porolog::Scope</small></div></li><li id='object_Porolog::Scope::ScopeError' class='collapsed'><div class='item' style='padding-left:60px'><span class='object_link'><a href="Porolog/Scope/ScopeError.html" title="Porolog::Scope::ScopeError (class)">ScopeError</a></span> &lt; PorologError<small class='search_info'>Porolog::Scope</small></div></li></ul></li></ul></li>
46
+ <li id='object_Array' class='even'><div class='item' style='padding-left:30px'><span class='object_link'><a href="Array.html" title="Array (class)">Array</a></span> &lt; Object<small class='search_info'>Top Level Namespace</small></div></li><li id='object_Object' class='odd'><div class='item' style='padding-left:30px'><span class='object_link'><a href="Object.html" title="Object (class)">Object</a></span> &lt; BasicObject<small class='search_info'>Top Level Namespace</small></div></li><li id='object_Porolog' class='even'><div class='item' style='padding-left:30px'><a class='toggle'></a> <span class='object_link'><a href="Porolog.html" title="Porolog (module)">Porolog</a></span><small class='search_info'>Top Level Namespace</small></div><ul><li id='object_Porolog::Arguments' class='collapsed odd'><div class='item' style='padding-left:45px'><span class='object_link'><a href="Porolog/Arguments.html" title="Porolog::Arguments (class)">Arguments</a></span> &lt; Object<small class='search_info'>Porolog</small></div></li><li id='object_Porolog::Goal' class='collapsed even'><div class='item' style='padding-left:45px'><a class='toggle'></a> <span class='object_link'><a href="Porolog/Goal.html" title="Porolog::Goal (class)">Goal</a></span> &lt; Object<small class='search_info'>Porolog</small></div><ul><li id='object_Porolog::Goal::DefinitionError' class='collapsed'><div class='item' style='padding-left:60px'><span class='object_link'><a href="Porolog/Goal/DefinitionError.html" title="Porolog::Goal::DefinitionError (class)">DefinitionError</a></span> &lt; Error<small class='search_info'>Porolog::Goal</small></div></li><li id='object_Porolog::Goal::Error' class='collapsed'><div class='item' style='padding-left:60px'><span class='object_link'><a href="Porolog/Goal/Error.html" title="Porolog::Goal::Error (class)">Error</a></span> &lt; PorologError<small class='search_info'>Porolog::Goal</small></div></li><li id='object_Porolog::Goal::NotVariableError' class='collapsed'><div class='item' style='padding-left:60px'><span class='object_link'><a href="Porolog/Goal/NotVariableError.html" title="Porolog::Goal::NotVariableError (class)">NotVariableError</a></span> &lt; Error<small class='search_info'>Porolog::Goal</small></div></li></ul></li><li id='object_Porolog::Instantiation' class='collapsed odd'><div class='item' style='padding-left:45px'><a class='toggle'></a> <span class='object_link'><a href="Porolog/Instantiation.html" title="Porolog::Instantiation (class)">Instantiation</a></span> &lt; Object<small class='search_info'>Porolog</small></div><ul><li id='object_Porolog::Instantiation::Error' class='collapsed'><div class='item' style='padding-left:60px'><span class='object_link'><a href="Porolog/Instantiation/Error.html" title="Porolog::Instantiation::Error (class)">Error</a></span> &lt; PorologError<small class='search_info'>Porolog::Instantiation</small></div></li><li id='object_Porolog::Instantiation::NoVariableError' class='collapsed'><div class='item' style='padding-left:60px'><span class='object_link'><a href="Porolog/Instantiation/NoVariableError.html" title="Porolog::Instantiation::NoVariableError (class)">NoVariableError</a></span> &lt; Error<small class='search_info'>Porolog::Instantiation</small></div></li><li id='object_Porolog::Instantiation::UnhandledIndexError' class='collapsed'><div class='item' style='padding-left:60px'><span class='object_link'><a href="Porolog/Instantiation/UnhandledIndexError.html" title="Porolog::Instantiation::UnhandledIndexError (class)">UnhandledIndexError</a></span> &lt; Error<small class='search_info'>Porolog::Instantiation</small></div></li></ul></li><li id='object_Porolog::NoGoalError' class='collapsed even'><div class='item' style='padding-left:45px'><span class='object_link'><a href="Porolog/NoGoalError.html" title="Porolog::NoGoalError (class)">NoGoalError</a></span> &lt; PorologError<small class='search_info'>Porolog</small></div></li><li id='object_Porolog::NonVariableError' class='collapsed odd'><div class='item' style='padding-left:45px'><span class='object_link'><a href="Porolog/NonVariableError.html" title="Porolog::NonVariableError (class)">NonVariableError</a></span> &lt; PorologError<small class='search_info'>Porolog</small></div></li><li id='object_Porolog::PorologError' class='collapsed even'><div class='item' style='padding-left:45px'><span class='object_link'><a href="Porolog/PorologError.html" title="Porolog::PorologError (class)">PorologError</a></span> &lt; RuntimeError<small class='search_info'>Porolog</small></div></li><li id='object_Porolog::Predicate' class='collapsed odd'><div class='item' style='padding-left:45px'><a class='toggle'></a> <span class='object_link'><a href="Porolog/Predicate.html" title="Porolog::Predicate (class)">Predicate</a></span> &lt; Object<small class='search_info'>Porolog</small></div><ul><li id='object_Porolog::Predicate::Builtin' class='collapsed'><div class='item' style='padding-left:60px'><span class='object_link'><a href="Porolog/Predicate/Builtin.html" title="Porolog::Predicate::Builtin (module)">Builtin</a></span><small class='search_info'>Porolog::Predicate</small></div></li><li id='object_Porolog::Predicate::Error' class='collapsed'><div class='item' style='padding-left:60px'><span class='object_link'><a href="Porolog/Predicate/Error.html" title="Porolog::Predicate::Error (class)">Error</a></span> &lt; PorologError<small class='search_info'>Porolog::Predicate</small></div></li><li id='object_Porolog::Predicate::NameError' class='collapsed'><div class='item' style='padding-left:60px'><span class='object_link'><a href="Porolog/Predicate/NameError.html" title="Porolog::Predicate::NameError (class)">NameError</a></span> &lt; Error<small class='search_info'>Porolog::Predicate</small></div></li></ul></li><li id='object_Porolog::Rule' class='collapsed even'><div class='item' style='padding-left:45px'><a class='toggle'></a> <span class='object_link'><a href="Porolog/Rule.html" title="Porolog::Rule (class)">Rule</a></span> &lt; Object<small class='search_info'>Porolog</small></div><ul><li id='object_Porolog::Rule::DefinitionError' class='collapsed'><div class='item' style='padding-left:60px'><span class='object_link'><a href="Porolog/Rule/DefinitionError.html" title="Porolog::Rule::DefinitionError (class)">DefinitionError</a></span> &lt; Error<small class='search_info'>Porolog::Rule</small></div></li><li id='object_Porolog::Rule::Error' class='collapsed'><div class='item' style='padding-left:60px'><span class='object_link'><a href="Porolog/Rule/Error.html" title="Porolog::Rule::Error (class)">Error</a></span> &lt; PorologError<small class='search_info'>Porolog::Rule</small></div></li></ul></li><li id='object_Porolog::Scope' class='collapsed odd'><div class='item' style='padding-left:45px'><a class='toggle'></a> <span class='object_link'><a href="Porolog/Scope.html" title="Porolog::Scope (class)">Scope</a></span> &lt; Object<small class='search_info'>Porolog</small></div><ul><li id='object_Porolog::Scope::Error' class='collapsed'><div class='item' style='padding-left:60px'><span class='object_link'><a href="Porolog/Scope/Error.html" title="Porolog::Scope::Error (class)">Error</a></span> &lt; PorologError<small class='search_info'>Porolog::Scope</small></div></li><li id='object_Porolog::Scope::NotPredicateError' class='collapsed'><div class='item' style='padding-left:60px'><span class='object_link'><a href="Porolog/Scope/NotPredicateError.html" title="Porolog::Scope::NotPredicateError (class)">NotPredicateError</a></span> &lt; Error<small class='search_info'>Porolog::Scope</small></div></li></ul></li><li id='object_Porolog::Tail' class='collapsed even'><div class='item' style='padding-left:45px'><span class='object_link'><a href="Porolog/Tail.html" title="Porolog::Tail (class)">Tail</a></span> &lt; Object<small class='search_info'>Porolog</small></div></li><li id='object_Porolog::Value' class='collapsed odd'><div class='item' style='padding-left:45px'><a class='toggle'></a> <span class='object_link'><a href="Porolog/Value.html" title="Porolog::Value (class)">Value</a></span> &lt; Object<small class='search_info'>Porolog</small></div><ul><li id='object_Porolog::Value::Error' class='collapsed'><div class='item' style='padding-left:60px'><span class='object_link'><a href="Porolog/Value/Error.html" title="Porolog::Value::Error (class)">Error</a></span> &lt; PorologError<small class='search_info'>Porolog::Value</small></div></li><li id='object_Porolog::Value::GoalError' class='collapsed'><div class='item' style='padding-left:60px'><span class='object_link'><a href="Porolog/Value/GoalError.html" title="Porolog::Value::GoalError (class)">GoalError</a></span> &lt; Error<small class='search_info'>Porolog::Value</small></div></li></ul></li><li id='object_Porolog::Variable' class='collapsed even'><div class='item' style='padding-left:45px'><a class='toggle'></a> <span class='object_link'><a href="Porolog/Variable.html" title="Porolog::Variable (class)">Variable</a></span> &lt; Object<small class='search_info'>Porolog</small></div><ul><li id='object_Porolog::Variable::Error' class='collapsed'><div class='item' style='padding-left:60px'><span class='object_link'><a href="Porolog/Variable/Error.html" title="Porolog::Variable::Error (class)">Error</a></span> &lt; PorologError<small class='search_info'>Porolog::Variable</small></div></li><li id='object_Porolog::Variable::GoalError' class='collapsed'><div class='item' style='padding-left:60px'><span class='object_link'><a href="Porolog/Variable/GoalError.html" title="Porolog::Variable::GoalError (class)">GoalError</a></span> &lt; Error<small class='search_info'>Porolog::Variable</small></div></li><li id='object_Porolog::Variable::MultipleValuesError' class='collapsed'><div class='item' style='padding-left:60px'><span class='object_link'><a href="Porolog/Variable/MultipleValuesError.html" title="Porolog::Variable::MultipleValuesError (class)">MultipleValuesError</a></span> &lt; Error<small class='search_info'>Porolog::Variable</small></div></li><li id='object_Porolog::Variable::SelfReferentialError' class='collapsed'><div class='item' style='padding-left:60px'><span class='object_link'><a href="Porolog/Variable/SelfReferentialError.html" title="Porolog::Variable::SelfReferentialError (class)">SelfReferentialError</a></span> &lt; Error<small class='search_info'>Porolog::Variable</small></div></li><li id='object_Porolog::Variable::UnexpectedError' class='collapsed'><div class='item' style='padding-left:60px'><span class='object_link'><a href="Porolog/Variable/UnexpectedError.html" title="Porolog::Variable::UnexpectedError (class)">UnexpectedError</a></span> &lt; Error<small class='search_info'>Porolog::Variable</small></div></li></ul></li></ul></li><li id='object_Symbol' class='odd'><div class='item' style='padding-left:30px'><span class='object_link'><a href="Symbol.html" title="Symbol (class)">Symbol</a></span> &lt; Object<small class='search_info'>Top Level Namespace</small></div></li>
47
47
 
48
48
  </ul>
49
49
  </div>
@@ -60,38 +60,23 @@
60
60
  <div id="content"><div id='filecontents'>
61
61
  <h1 id="label-porolog">porolog</h1>
62
62
 
63
- <p>&lt;img src=“<a
64
- href="https://repository-images.githubusercontent.com/131847563/b3754100-636a-11e9-995b-20d409b992c9">repository-images.githubusercontent.com/131847563/b3754100-636a-11e9-995b-20d409b992c9</a>”
65
- width=“240” height=“120” align=“right” /&gt;</p>
63
+ <p>&lt;img src=“<a href="https://repository-images.githubusercontent.com/131847563/b3754100-636a-11e9-995b-20d409b992c9">repository-images.githubusercontent.com/131847563/b3754100-636a-11e9-995b-20d409b992c9</a>” width=“240” height=“120” align=“right” /&gt;</p>
66
64
 
67
- <p>Plain Old Ruby Objects Prolog (WORK IN PROGRESS)</p>
65
+ <p>Plain Old Ruby Objects Prolog</p>
68
66
 
69
- <p><a href="https://badge.fury.io/rb/porolog"><img
70
- src="https://badge.fury.io/rb/porolog.svg"></a> <a
71
- href="https://travis-ci.com/wizardofosmium/porolog"><img
72
- src="https://travis-ci.com/wizardofosmium/porolog.svg?branch=master"></a>
73
- <img
74
- src="https://img.shields.io/badge/status-work%20in%20progress-orange.svg">
75
- <a href="https://github.com/wizardofosmium/porolog"><img
76
- src="https://wizardofosmium.github.io/porolog/coverage/badge.svg"></a></p>
67
+ <p><a href="https://badge.fury.io/rb/porolog"><img src="https://badge.fury.io/rb/porolog.svg"></a> <a href="https://travis-ci.com/wizardofosmium/porolog"><img src="https://travis-ci.com/wizardofosmium/porolog.svg?branch=master"></a> <a href="https://github.com/wizardofosmium/porolog"><img src="https://github.com/wizardofosmium/porolog/blob/master/coverage/badge.svg"></a></p>
77
68
 
78
69
  <h2 id="label-Introduction">Introduction</h2>
79
70
 
80
- <p><code>porolog</code> is a Prolog implementation using plain old Ruby
81
- objects with the aim that logic queries can be called within a regular Ruby
82
- program. The goal was not to implement a Prolog interpreter that is just
83
- implement in Ruby, but rather that a logic engine could be embedded in a
84
- larger program.</p>
71
+ <p><code>porolog</code> is a Prolog implementation using plain old Ruby objects with the aim that logic queries can be called within a regular Ruby program. The goal was not to implement a Prolog interpreter that is just implement in Ruby, but rather that a logic engine could be embedded in a larger program.</p>
85
72
 
86
- <p>The need that this gem aims to meet is to have a Ruby program interact with
87
- a Prolog program using native Ruby objects (POROs); hence the name Porolog.
88
- The goal was to implement a minimal logic engine in the style of Prolog
89
- where Ruby objects could be passed in and Ruby objects were passed back.</p>
73
+ <p>The need that this gem aims to meet is to have a Ruby program interact with a Prolog program using native Ruby objects (POROs); hence the name Porolog. The goal was to implement a minimal logic engine in the style of Prolog where Ruby objects could be passed in and Ruby objects were passed back.</p>
74
+
75
+ <p>This version completes the minimal/generic logic engine along with some standard builtin predicates. Custom builtin predicates can be easily added.</p>
90
76
 
91
77
  <h2 id="label-Dependencies">Dependencies</h2>
92
78
 
93
- <p>The aim of <code>porolog</code> is to provide a logic engine with a minimal
94
- footprint. The only extra dependency is Yard for documentation.</p>
79
+ <p>The aim of <code>porolog</code> is to provide a logic engine with a minimal footprint. The only extra dependency is Yard for documentation.</p>
95
80
 
96
81
  <h2 id="label-Installation">Installation</h2>
97
82
 
@@ -109,13 +94,13 @@ footprint. The only extra dependency is Yard for documentation.</p>
109
94
  <p>solving goals</p>
110
95
  </li></ul>
111
96
 
112
- <p>It is entirely possible to create a Ruby program that is effectively just a
113
- Prolog program.</p>
97
+ <p>It is entirely possible to create a Ruby program that is effectively just a Prolog program. The main purpose of Porolog though is to add declarative logic programming to Ruby and allow hybrid programming, in the same way that Ruby allows hybrid programming in the functional programming paradigm.</p>
98
+
99
+ <p>This then Ruby programs to be written spanning all the major programming paradigms: - Imperative - Functional - Object Oriented - Declarative Logic</p>
114
100
 
115
101
  <h3 id="label-Basic+Usage">Basic Usage</h3>
116
102
 
117
- <p>Using <code>porolog</code> involves creating logic from facts and rules. An
118
- example, of the most basic usage uses just facts.</p>
103
+ <p>Using <code>porolog</code> involves creating logic from facts and rules. An example, of the most basic usage uses just facts.</p>
119
104
 
120
105
  <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_require'>require</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>porolog</span><span class='tstring_end'>&#39;</span></span>
121
106
 
@@ -135,15 +120,15 @@ example, of the most basic usage uses just facts.</p>
135
120
 
136
121
  <h3 id="label-Common+Usage">Common Usage</h3>
137
122
 
138
- <p>Common usage is expected to be including Porolog in a class and
139
- encapsulating the engine defined.</p>
123
+ <p>Common usage is expected to be including Porolog in a class and encapsulating the engine defined.</p>
140
124
 
141
125
  <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_require'>require</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>porolog</span><span class='tstring_end'>&#39;</span></span>
142
126
 
143
- <span class='kw'>class</span> <span class='const'>Numbers</span>
127
+ <span class='id identifier rubyid_include'>include</span> <span class='const'><span class='object_link'><a href="Porolog.html" title="Porolog (module)">Porolog</a></span></span>
144
128
 
145
- <span class='id identifier rubyid_include'>include</span> <span class='const'><span class='object_link'><a href="Porolog.html" title="Porolog (module)">Porolog</a></span></span>
129
+ <span class='kw'>class</span> <span class='const'>Numbers</span>
146
130
 
131
+ <span class='const'>Predicate</span><span class='period'>.</span><span class='id identifier rubyid_scope'>scope</span> <span class='kw'>self</span>
147
132
  <span class='id identifier rubyid_predicate'>predicate</span> <span class='symbol'>:prime</span>
148
133
 
149
134
  <span class='id identifier rubyid_prime'>prime</span><span class='lparen'>(</span><span class='int'>2</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_fact!'>fact!</span>
@@ -164,16 +149,18 @@ encapsulating the engine defined.</p>
164
149
  <span class='kw'>end</span>
165
150
 
166
151
  <span class='kw'>end</span>
152
+
153
+
154
+ <span class='id identifier rubyid_numbers'>numbers</span> <span class='op'>=</span> <span class='const'>Numbers</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span>
155
+ <span class='id identifier rubyid_numbers'>numbers</span><span class='period'>.</span><span class='id identifier rubyid_show_primes'>show_primes</span>
156
+ <span class='id identifier rubyid_puts'>puts</span> <span class='id identifier rubyid_numbers'>numbers</span><span class='period'>.</span><span class='id identifier rubyid_primes'>primes</span><span class='period'>.</span><span class='id identifier rubyid_inspect'>inspect</span>
167
157
  </code></pre>
168
158
 
169
159
  <h3 id="label-Scope+and+Predicate+Usage">Scope and Predicate Usage</h3>
170
160
 
171
- <p>A Predicate represents a Prolog predicate. They form the basis for rules
172
- and queries.</p>
161
+ <p>A Predicate represents a Prolog predicate. They form the basis for rules and queries.</p>
173
162
 
174
- <p>The Scope class enables you to have multiple logic programs embedded in the
175
- same Ruby program. A Scope object defines a scope for the predicates of a
176
- logic programme.</p>
163
+ <p>The Scope class enables you to have multiple logic programs embedded in the same Ruby program. A Scope object defines a scope for the predicates of a logic programme.</p>
177
164
 
178
165
  <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_require'>require</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>porolog</span><span class='tstring_end'>&#39;</span></span>
179
166
 
@@ -229,9 +216,17 @@ logic programme.</p>
229
216
 
230
217
  <p>or</p>
231
218
 
232
- <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_rake'>rake</span> <span class='id identifier rubyid_scope_test'>scope_test</span>
219
+ <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_rake'>rake</span> <span class='id identifier rubyid_core_ext_test'>core_ext_test</span>
220
+ <span class='id identifier rubyid_rake'>rake</span> <span class='id identifier rubyid_porolog_test'>porolog_test</span>
221
+ <span class='id identifier rubyid_rake'>rake</span> <span class='id identifier rubyid_scope_test'>scope_test</span>
233
222
  <span class='id identifier rubyid_rake'>rake</span> <span class='id identifier rubyid_predicate_test'>predicate_test</span>
234
223
  <span class='id identifier rubyid_rake'>rake</span> <span class='id identifier rubyid_arguments_test'>arguments_test</span>
224
+ <span class='id identifier rubyid_rake'>rake</span> <span class='id identifier rubyid_rule_test'>rule_test</span>
225
+ <span class='id identifier rubyid_rake'>rake</span> <span class='id identifier rubyid_goal_test'>goal_test</span>
226
+ <span class='id identifier rubyid_rake'>rake</span> <span class='id identifier rubyid_variable_test'>variable_test</span>
227
+ <span class='id identifier rubyid_rake'>rake</span> <span class='id identifier rubyid_value_test'>value_test</span>
228
+ <span class='id identifier rubyid_rake'>rake</span> <span class='id identifier rubyid_tail_test'>tail_test</span>
229
+ <span class='id identifier rubyid_rake'>rake</span> <span class='id identifier rubyid_instantiation_test'>instantiation_test</span>
235
230
  </code></pre>
236
231
 
237
232
  <h2 id="label-Author">Author</h2>
@@ -240,9 +235,9 @@ logic programme.</p>
240
235
  </div></div>
241
236
 
242
237
  <div id="footer">
243
- Generated on Mon Apr 22 16:27:39 2019 by
238
+ Generated on Sun Aug 2 19:24:16 2020 by
244
239
  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
245
- 0.9.19 (ruby-2.3.4).
240
+ 0.9.19 (ruby-2.6.5).
246
241
  </div>
247
242
 
248
243
  </div>