porolog 0.0.8 → 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.
- checksums.yaml +4 -4
- data/README.md +11 -1
- data/Rakefile +2 -2
- data/bin/porolog +34 -13
- data/coverage/badge.svg +1 -1
- data/coverage/index.html +43822 -25140
- data/doc/Array.html +158 -51
- data/doc/Object.html +2 -2
- data/doc/Porolog.html +1584 -1113
- data/doc/Symbol.html +2 -2
- data/doc/_index.html +40 -56
- data/doc/class_list.html +1 -1
- data/doc/file.README.html +8 -4
- data/doc/index.html +8 -4
- data/doc/method_list.html +424 -248
- data/doc/top-level-namespace.html +1 -1
- data/lib/porolog.rb +184 -61
- data/lib/porolog/arguments.rb +12 -11
- data/lib/porolog/core_ext.rb +27 -9
- data/lib/porolog/error.rb +3 -0
- data/lib/porolog/goal.rb +57 -15
- data/lib/porolog/instantiation.rb +55 -9
- data/lib/porolog/predicate.rb +52 -26
- data/lib/porolog/predicate/builtin.rb +825 -0
- data/lib/porolog/rule.rb +8 -24
- data/lib/porolog/scope.rb +1 -1
- data/lib/porolog/tail.rb +5 -0
- data/lib/porolog/value.rb +3 -3
- data/lib/porolog/variable.rb +29 -11
- data/test/porolog/arguments_test.rb +45 -66
- data/test/porolog/core_ext_test.rb +25 -0
- data/test/porolog/goal_test.rb +86 -9
- data/test/porolog/instantiation_test.rb +36 -0
- data/test/porolog/porolog_test.rb +285 -30
- data/test/porolog/predicate/builtin_test.rb +1340 -0
- data/test/porolog/predicate_test.rb +78 -16
- data/test/porolog/rule_test.rb +19 -0
- data/test/porolog/variable_test.rb +44 -55
- data/test/samples_test.rb +277 -0
- data/test/test_helper.rb +9 -0
- metadata +9 -5
data/doc/Array.html
CHANGED
@@ -146,6 +146,30 @@
|
|
146
146
|
<p>An Array with the Object being the head and the other Object being the tail.</p>
|
147
147
|
</div></span>
|
148
148
|
|
149
|
+
</li>
|
150
|
+
|
151
|
+
|
152
|
+
<li class="public ">
|
153
|
+
<span class="summary_signature">
|
154
|
+
|
155
|
+
<a href="#clean-instance_method" title="#clean (instance method)">#<strong>clean</strong> ⇒ Array </a>
|
156
|
+
|
157
|
+
|
158
|
+
|
159
|
+
</span>
|
160
|
+
|
161
|
+
|
162
|
+
|
163
|
+
|
164
|
+
|
165
|
+
|
166
|
+
|
167
|
+
|
168
|
+
|
169
|
+
<span class="summary_desc"><div class='inline'>
|
170
|
+
<p>Removes Porolog processing objects.</p>
|
171
|
+
</div></span>
|
172
|
+
|
149
173
|
</li>
|
150
174
|
|
151
175
|
|
@@ -272,7 +296,7 @@
|
|
272
296
|
<li class="public ">
|
273
297
|
<span class="summary_signature">
|
274
298
|
|
275
|
-
<a href="#value-instance_method" title="#value (instance method)">#<strong>value</strong>(
|
299
|
+
<a href="#value-instance_method" title="#value (instance method)">#<strong>value</strong>(visited = []) ⇒ Array </a>
|
276
300
|
|
277
301
|
|
278
302
|
|
@@ -390,16 +414,16 @@
|
|
390
414
|
<pre class="lines">
|
391
415
|
|
392
416
|
|
393
|
-
|
394
|
-
|
395
|
-
|
396
|
-
|
397
|
-
|
398
|
-
|
399
|
-
|
417
|
+
146
|
418
|
+
147
|
419
|
+
148
|
420
|
+
149
|
421
|
+
150
|
422
|
+
151
|
423
|
+
152</pre>
|
400
424
|
</td>
|
401
425
|
<td>
|
402
|
-
<pre class="code"><span class="info file"># File 'lib/porolog/core_ext.rb', line
|
426
|
+
<pre class="code"><span class="info file"># File 'lib/porolog/core_ext.rb', line 146</span>
|
403
427
|
|
404
428
|
<span class='kw'>def</span> <span class='op'>/</span><span class='lparen'>(</span><span class='id identifier rubyid_other'>other</span><span class='rparen'>)</span>
|
405
429
|
<span class='kw'>if</span> <span class='id identifier rubyid_other'>other</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'><span class='object_link'><a href="Porolog.html" title="Porolog (module)">Porolog</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Porolog/Variable.html" title="Porolog::Variable (class)">Variable</a></span></span><span class='rparen'>)</span> <span class='op'>||</span> <span class='id identifier rubyid_other'>other</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'><span class='object_link'><a href="Symbol.html" title="Symbol (class)">Symbol</a></span></span><span class='rparen'>)</span>
|
@@ -411,6 +435,85 @@
|
|
411
435
|
</td>
|
412
436
|
</tr>
|
413
437
|
</table>
|
438
|
+
</div>
|
439
|
+
|
440
|
+
<div class="method_details ">
|
441
|
+
<h3 class="signature " id="clean-instance_method">
|
442
|
+
|
443
|
+
#<strong>clean</strong> ⇒ <tt><span class='object_link'><a href="" title="Array (class)">Array</a></span></tt>
|
444
|
+
|
445
|
+
|
446
|
+
|
447
|
+
|
448
|
+
|
449
|
+
</h3><div class="docstring">
|
450
|
+
<div class="discussion">
|
451
|
+
|
452
|
+
<p>Removes Porolog processing objects.</p>
|
453
|
+
|
454
|
+
|
455
|
+
</div>
|
456
|
+
</div>
|
457
|
+
<div class="tags">
|
458
|
+
|
459
|
+
<p class="tag_title">Returns:</p>
|
460
|
+
<ul class="return">
|
461
|
+
|
462
|
+
<li>
|
463
|
+
|
464
|
+
|
465
|
+
<span class='type'>(<tt><span class='object_link'><a href="" title="Array (class)">Array</a></span></tt>)</span>
|
466
|
+
|
467
|
+
|
468
|
+
|
469
|
+
—
|
470
|
+
<div class='inline'>
|
471
|
+
<p>the values of its elements with variables replaced by nil and Tails replaced by UNKNOWN_TAIL.</p>
|
472
|
+
</div>
|
473
|
+
|
474
|
+
</li>
|
475
|
+
|
476
|
+
</ul>
|
477
|
+
|
478
|
+
</div><table class="source_code">
|
479
|
+
<tr>
|
480
|
+
<td>
|
481
|
+
<pre class="lines">
|
482
|
+
|
483
|
+
|
484
|
+
125
|
485
|
+
126
|
486
|
+
127
|
487
|
+
128
|
488
|
+
129
|
489
|
+
130
|
490
|
+
131
|
491
|
+
132
|
492
|
+
133
|
493
|
+
134
|
494
|
+
135
|
495
|
+
136
|
496
|
+
137</pre>
|
497
|
+
</td>
|
498
|
+
<td>
|
499
|
+
<pre class="code"><span class="info file"># File 'lib/porolog/core_ext.rb', line 125</span>
|
500
|
+
|
501
|
+
<span class='kw'>def</span> <span class='id identifier rubyid_clean'>clean</span>
|
502
|
+
<span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_map'>map</span><span class='lbrace'>{</span><span class='op'>|</span><span class='id identifier rubyid_element'>element</span><span class='op'>|</span>
|
503
|
+
<span class='kw'>if</span> <span class='id identifier rubyid_element'>element</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'><span class='object_link'><a href="" title="Array (class)">Array</a></span></span><span class='rparen'>)</span>
|
504
|
+
<span class='id identifier rubyid_element'>element</span><span class='period'>.</span><span class='id identifier rubyid_clean'>clean</span>
|
505
|
+
<span class='kw'>elsif</span> <span class='id identifier rubyid_element'>element</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'>Tail</span><span class='rparen'>)</span>
|
506
|
+
<span class='const'>UNKNOWN_TAIL</span>
|
507
|
+
<span class='kw'>elsif</span> <span class='id identifier rubyid_element'>element</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'>Variable</span><span class='rparen'>)</span>
|
508
|
+
<span class='kw'>nil</span>
|
509
|
+
<span class='kw'>else</span>
|
510
|
+
<span class='id identifier rubyid_element'>element</span><span class='period'>.</span><span class='id identifier rubyid_value'>value</span>
|
511
|
+
<span class='kw'>end</span>
|
512
|
+
<span class='rbrace'>}</span>
|
513
|
+
<span class='kw'>end</span></pre>
|
514
|
+
</td>
|
515
|
+
</tr>
|
516
|
+
</table>
|
414
517
|
</div>
|
415
518
|
|
416
519
|
<div class="method_details ">
|
@@ -457,12 +560,12 @@
|
|
457
560
|
<pre class="lines">
|
458
561
|
|
459
562
|
|
460
|
-
|
461
|
-
|
462
|
-
|
563
|
+
184
|
564
|
+
185
|
565
|
+
186</pre>
|
463
566
|
</td>
|
464
567
|
<td>
|
465
|
-
<pre class="code"><span class="info file"># File 'lib/porolog/core_ext.rb', line
|
568
|
+
<pre class="code"><span class="info file"># File 'lib/porolog/core_ext.rb', line 184</span>
|
466
569
|
|
467
570
|
<span class='kw'>def</span> <span class='id identifier rubyid_goal'>goal</span>
|
468
571
|
<span class='id identifier rubyid_map'>map</span><span class='lbrace'>{</span><span class='op'>|</span><span class='id identifier rubyid_element'>element</span><span class='op'>|</span> <span class='id identifier rubyid_element'>element</span><span class='period'>.</span><span class='id identifier rubyid_goal'>goal</span> <span class='kw'>if</span> <span class='id identifier rubyid_element'>element</span><span class='period'>.</span><span class='id identifier rubyid_respond_to?'>respond_to?</span><span class='lparen'>(</span><span class='symbol'>:goal</span><span class='rparen'>)</span> <span class='rbrace'>}</span><span class='period'>.</span><span class='id identifier rubyid_flatten'>flatten</span><span class='period'>.</span><span class='id identifier rubyid_find'>find</span><span class='lbrace'>{</span><span class='op'>|</span><span class='id identifier rubyid_goal'>goal</span><span class='op'>|</span> <span class='id identifier rubyid_goal'>goal</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'><span class='object_link'><a href="Porolog.html" title="Porolog (module)">Porolog</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Porolog/Goal.html" title="Porolog::Goal (class)">Goal</a></span></span><span class='rparen'>)</span> <span class='rbrace'>}</span>
|
@@ -538,20 +641,20 @@
|
|
538
641
|
<pre class="lines">
|
539
642
|
|
540
643
|
|
541
|
-
|
542
|
-
|
543
|
-
|
544
|
-
|
545
|
-
|
546
|
-
|
547
|
-
|
548
|
-
|
549
|
-
|
550
|
-
|
551
|
-
|
644
|
+
156
|
645
|
+
157
|
646
|
+
158
|
647
|
+
159
|
648
|
+
160
|
649
|
+
161
|
650
|
+
162
|
651
|
+
163
|
652
|
+
164
|
653
|
+
165
|
654
|
+
166</pre>
|
552
655
|
</td>
|
553
656
|
<td>
|
554
|
-
<pre class="code"><span class="info file"># File 'lib/porolog/core_ext.rb', line
|
657
|
+
<pre class="code"><span class="info file"># File 'lib/porolog/core_ext.rb', line 156</span>
|
555
658
|
|
556
659
|
<span class='kw'>def</span> <span class='id identifier rubyid_head'>head</span><span class='lparen'>(</span><span class='id identifier rubyid_head_size'>head_size</span> <span class='op'>=</span> <span class='int'>1</span><span class='rparen'>)</span>
|
557
660
|
<span class='kw'>if</span> <span class='id identifier rubyid_head_size'>head_size</span> <span class='op'>==</span> <span class='int'>1</span>
|
@@ -613,12 +716,12 @@
|
|
613
716
|
<pre class="lines">
|
614
717
|
|
615
718
|
|
616
|
-
|
617
|
-
|
618
|
-
|
719
|
+
179
|
720
|
+
180
|
721
|
+
181</pre>
|
619
722
|
</td>
|
620
723
|
<td>
|
621
|
-
<pre class="code"><span class="info file"># File 'lib/porolog/core_ext.rb', line
|
724
|
+
<pre class="code"><span class="info file"># File 'lib/porolog/core_ext.rb', line 179</span>
|
622
725
|
|
623
726
|
<span class='kw'>def</span> <span class='id identifier rubyid_headtail?'>headtail?</span>
|
624
727
|
<span class='id identifier rubyid_length'>length</span> <span class='op'>==</span> <span class='int'>2</span> <span class='op'>&&</span> <span class='lparen'>(</span><span class='id identifier rubyid_last'>last</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'>Tail</span><span class='rparen'>)</span> <span class='op'>||</span> <span class='id identifier rubyid_last'>last</span> <span class='op'>==</span> <span class='const'>UNKNOWN_TAIL</span><span class='rparen'>)</span>
|
@@ -694,16 +797,16 @@
|
|
694
797
|
<pre class="lines">
|
695
798
|
|
696
799
|
|
697
|
-
|
698
|
-
|
699
|
-
|
700
|
-
|
701
|
-
|
702
|
-
|
703
|
-
|
800
|
+
170
|
801
|
+
171
|
802
|
+
172
|
803
|
+
173
|
804
|
+
174
|
805
|
+
175
|
806
|
+
176</pre>
|
704
807
|
</td>
|
705
808
|
<td>
|
706
|
-
<pre class="code"><span class="info file"># File 'lib/porolog/core_ext.rb', line
|
809
|
+
<pre class="code"><span class="info file"># File 'lib/porolog/core_ext.rb', line 170</span>
|
707
810
|
|
708
811
|
<span class='kw'>def</span> <span class='id identifier rubyid_tail'>tail</span><span class='lparen'>(</span><span class='id identifier rubyid_head_size'>head_size</span> <span class='op'>=</span> <span class='int'>1</span><span class='rparen'>)</span>
|
709
812
|
<span class='kw'>if</span> <span class='id identifier rubyid_last'>last</span> <span class='op'>==</span> <span class='const'><span class='object_link'><a href="Porolog.html" title="Porolog (module)">Porolog</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Porolog.html#UNKNOWN_TAIL-constant" title="Porolog::UNKNOWN_TAIL (constant)">UNKNOWN_TAIL</a></span></span>
|
@@ -761,12 +864,12 @@
|
|
761
864
|
<pre class="lines">
|
762
865
|
|
763
866
|
|
764
|
-
|
765
|
-
|
766
|
-
|
867
|
+
140
|
868
|
+
141
|
869
|
+
142</pre>
|
767
870
|
</td>
|
768
871
|
<td>
|
769
|
-
<pre class="code"><span class="info file"># File 'lib/porolog/core_ext.rb', line
|
872
|
+
<pre class="code"><span class="info file"># File 'lib/porolog/core_ext.rb', line 140</span>
|
770
873
|
|
771
874
|
<span class='kw'>def</span> <span class='id identifier rubyid_type'>type</span>
|
772
875
|
<span class='symbol'>:array</span>
|
@@ -779,7 +882,7 @@
|
|
779
882
|
<div class="method_details ">
|
780
883
|
<h3 class="signature " id="value-instance_method">
|
781
884
|
|
782
|
-
#<strong>value</strong>(
|
885
|
+
#<strong>value</strong>(visited = []) ⇒ <tt><span class='object_link'><a href="" title="Array (class)">Array</a></span></tt>
|
783
886
|
|
784
887
|
|
785
888
|
|
@@ -847,23 +950,27 @@
|
|
847
950
|
116
|
848
951
|
117
|
849
952
|
118
|
850
|
-
119
|
953
|
+
119
|
954
|
+
120
|
955
|
+
121</pre>
|
851
956
|
</td>
|
852
957
|
<td>
|
853
958
|
<pre class="code"><span class="info file"># File 'lib/porolog/core_ext.rb', line 92</span>
|
854
959
|
|
855
|
-
<span class='kw'>def</span> <span class='id identifier rubyid_value'>value</span><span class='lparen'>(</span><span class='
|
856
|
-
<span class='
|
960
|
+
<span class='kw'>def</span> <span class='id identifier rubyid_value'>value</span><span class='lparen'>(</span><span class='id identifier rubyid_visited'>visited</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='rbracket'>]</span><span class='rparen'>)</span>
|
961
|
+
<span class='kw'>return</span> <span class='kw'>self</span> <span class='kw'>if</span> <span class='id identifier rubyid_visited'>visited</span><span class='period'>.</span><span class='id identifier rubyid_include?'>include?</span><span class='lparen'>(</span><span class='kw'>self</span><span class='rparen'>)</span>
|
962
|
+
<span class='id identifier rubyid_visited'>visited</span> <span class='op'>=</span> <span class='id identifier rubyid_visited'>visited</span> <span class='op'>+</span> <span class='lbracket'>[</span><span class='kw'>self</span><span class='rbracket'>]</span>
|
963
|
+
<span class='id identifier rubyid_flat_map'>flat_map</span><span class='lbrace'>{</span><span class='op'>|</span><span class='id identifier rubyid_element'>element</span><span class='op'>|</span>
|
857
964
|
<span class='kw'>if</span> <span class='id identifier rubyid_element'>element</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'>Tail</span><span class='rparen'>)</span>
|
858
|
-
<span class='id identifier rubyid_tail'>tail</span> <span class='op'>=</span> <span class='id identifier rubyid_element'>element</span><span class='period'>.</span><span class='id identifier rubyid_value'>value</span><span class='lparen'>(</span><span class='
|
965
|
+
<span class='id identifier rubyid_tail'>tail</span> <span class='op'>=</span> <span class='id identifier rubyid_element'>element</span><span class='period'>.</span><span class='id identifier rubyid_value'>value</span><span class='lparen'>(</span><span class='id identifier rubyid_visited'>visited</span><span class='rparen'>)</span>
|
859
966
|
<span class='kw'>if</span> <span class='id identifier rubyid_tail'>tail</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'><span class='object_link'><a href="" title="Array (class)">Array</a></span></span><span class='rparen'>)</span>
|
860
967
|
<span class='id identifier rubyid_tail'>tail</span>
|
861
968
|
<span class='kw'>elsif</span> <span class='id identifier rubyid_tail'>tail</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'>Variable</span><span class='rparen'>)</span> <span class='op'>||</span> <span class='id identifier rubyid_tail'>tail</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'>Value</span><span class='rparen'>)</span>
|
862
|
-
<span class='id identifier rubyid_tail'>tail</span> <span class='op'>=</span> <span class='id identifier rubyid_tail'>tail</span><span class='period'>.</span><span class='id identifier rubyid_value'>value</span><span class='lparen'>(</span><span class='
|
969
|
+
<span class='id identifier rubyid_tail'>tail</span> <span class='op'>=</span> <span class='id identifier rubyid_tail'>tail</span><span class='period'>.</span><span class='id identifier rubyid_value'>value</span><span class='lparen'>(</span><span class='id identifier rubyid_visited'>visited</span><span class='rparen'>)</span>
|
863
970
|
<span class='kw'>if</span> <span class='id identifier rubyid_tail'>tail</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'><span class='object_link'><a href="" title="Array (class)">Array</a></span></span><span class='rparen'>)</span>
|
864
971
|
<span class='id identifier rubyid_tail'>tail</span>
|
865
972
|
<span class='kw'>elsif</span> <span class='id identifier rubyid_tail'>tail</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'>Variable</span><span class='rparen'>)</span> <span class='op'>||</span> <span class='id identifier rubyid_tail'>tail</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'>Value</span><span class='rparen'>)</span>
|
866
|
-
<span class='id identifier rubyid_tail'>tail</span> <span class='op'>=</span> <span class='id identifier rubyid_tail'>tail</span><span class='period'>.</span><span class='id identifier rubyid_goal'>goal</span><span class='period'>.</span><span class='id identifier rubyid_variablise'>variablise</span><span class='lparen'>(</span><span class='id identifier rubyid_tail'>tail</span><span class='period'>.</span><span class='id identifier rubyid_value'>value</span><span class='lparen'>(</span><span class='
|
973
|
+
<span class='id identifier rubyid_tail'>tail</span> <span class='op'>=</span> <span class='id identifier rubyid_tail'>tail</span><span class='period'>.</span><span class='id identifier rubyid_goal'>goal</span><span class='period'>.</span><span class='id identifier rubyid_variablise'>variablise</span><span class='lparen'>(</span><span class='id identifier rubyid_tail'>tail</span><span class='period'>.</span><span class='id identifier rubyid_value'>value</span><span class='lparen'>(</span><span class='id identifier rubyid_visited'>visited</span><span class='rparen'>)</span><span class='rparen'>)</span>
|
867
974
|
<span class='kw'>if</span> <span class='id identifier rubyid_tail'>tail</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'><span class='object_link'><a href="" title="Array (class)">Array</a></span></span><span class='rparen'>)</span>
|
868
975
|
<span class='id identifier rubyid_tail'>tail</span>
|
869
976
|
<span class='kw'>else</span>
|
@@ -876,9 +983,9 @@
|
|
876
983
|
<span class='lbracket'>[</span><span class='id identifier rubyid_element'>element</span><span class='rbracket'>]</span>
|
877
984
|
<span class='kw'>end</span>
|
878
985
|
<span class='kw'>else</span>
|
879
|
-
<span class='lbracket'>[</span><span class='id identifier rubyid_element'>element</span><span class='period'>.</span><span class='id identifier rubyid_value'>value</span><span class='lparen'>(</span><span class='
|
986
|
+
<span class='lbracket'>[</span><span class='id identifier rubyid_element'>element</span><span class='period'>.</span><span class='id identifier rubyid_value'>value</span><span class='lparen'>(</span><span class='id identifier rubyid_visited'>visited</span><span class='rparen'>)</span><span class='rbracket'>]</span>
|
880
987
|
<span class='kw'>end</span>
|
881
|
-
<span class='rbrace'>}</span
|
988
|
+
<span class='rbrace'>}</span>
|
882
989
|
<span class='kw'>end</span></pre>
|
883
990
|
</td>
|
884
991
|
</tr>
|
@@ -949,7 +1056,7 @@
|
|
949
1056
|
</div>
|
950
1057
|
|
951
1058
|
<div id="footer">
|
952
|
-
Generated on
|
1059
|
+
Generated on Sun Aug 2 19:24:17 2020 by
|
953
1060
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
954
1061
|
0.9.19 (ruby-2.6.5).
|
955
1062
|
</div>
|
data/doc/Object.html
CHANGED
@@ -383,7 +383,7 @@
|
|
383
383
|
<pre class="code"><span class="info file"># File 'lib/porolog/core_ext.rb', line 16</span>
|
384
384
|
|
385
385
|
<span class='kw'>def</span> <span class='id identifier rubyid_myid'>myid</span>
|
386
|
-
<span class='
|
386
|
+
<span class='id identifier rubyid_inspect'>inspect</span>
|
387
387
|
<span class='kw'>end</span></pre>
|
388
388
|
</td>
|
389
389
|
</tr>
|
@@ -664,7 +664,7 @@
|
|
664
664
|
</div>
|
665
665
|
|
666
666
|
<div id="footer">
|
667
|
-
Generated on
|
667
|
+
Generated on Sun Aug 2 19:24:17 2020 by
|
668
668
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
669
669
|
0.9.19 (ruby-2.6.5).
|
670
670
|
</div>
|
data/doc/Porolog.html
CHANGED
@@ -79,7 +79,7 @@
|
|
79
79
|
<dl>
|
80
80
|
<dt>Defined in:</dt>
|
81
81
|
<dd>lib/porolog.rb<span class="defines">,<br />
|
82
|
-
lib/porolog/goal.rb,<br /> lib/porolog/rule.rb,<br /> lib/porolog/tail.rb,<br /> lib/porolog/error.rb,<br /> lib/porolog/scope.rb,<br /> lib/porolog/value.rb,<br /> lib/porolog/variable.rb,<br /> lib/porolog/arguments.rb,<br /> lib/porolog/predicate.rb,<br /> lib/porolog/instantiation.rb</span>
|
82
|
+
lib/porolog/goal.rb,<br /> lib/porolog/rule.rb,<br /> lib/porolog/tail.rb,<br /> lib/porolog/error.rb,<br /> lib/porolog/scope.rb,<br /> lib/porolog/value.rb,<br /> lib/porolog/variable.rb,<br /> lib/porolog/arguments.rb,<br /> lib/porolog/predicate.rb,<br /> lib/porolog/instantiation.rb,<br /> lib/porolog/predicate/builtin.rb</span>
|
83
83
|
</dd>
|
84
84
|
</dl>
|
85
85
|
|
@@ -88,9 +88,9 @@
|
|
88
88
|
<h2>Overview</h2><div class="docstring">
|
89
89
|
<div class="discussion">
|
90
90
|
|
91
|
-
<p>lib/porolog/
|
91
|
+
<p>lib/porolog/predicate/builtin.rb - Plain Old Ruby Objects Prolog Engine – Builtin Predicates</p>
|
92
92
|
|
93
|
-
<pre class="code ruby"><code class="ruby">Luis Esteban
|
93
|
+
<pre class="code ruby"><code class="ruby">Luis Esteban 29 July 2020
|
94
94
|
created
|
95
95
|
</code></pre>
|
96
96
|
|
@@ -106,7 +106,7 @@
|
|
106
106
|
|
107
107
|
|
108
108
|
|
109
|
-
<strong class="classes">Classes:</strong> <span class='object_link'><a href="Porolog/Arguments.html" title="Porolog::Arguments (class)">Arguments</a></span>, <span class='object_link'><a href="Porolog/Goal.html" title="Porolog::Goal (class)">Goal</a></span>, <span class='object_link'><a href="Porolog/Instantiation.html" title="Porolog::Instantiation (class)">Instantiation</a></span>, <span class='object_link'><a href="Porolog/NoGoalError.html" title="Porolog::NoGoalError (class)">NoGoalError</a></span>, <span class='object_link'><a href="Porolog/PorologError.html" title="Porolog::PorologError (class)">PorologError</a></span>, <span class='object_link'><a href="Porolog/Predicate.html" title="Porolog::Predicate (class)">Predicate</a></span>, <span class='object_link'><a href="Porolog/Rule.html" title="Porolog::Rule (class)">Rule</a></span>, <span class='object_link'><a href="Porolog/Scope.html" title="Porolog::Scope (class)">Scope</a></span>, <span class='object_link'><a href="Porolog/Tail.html" title="Porolog::Tail (class)">Tail</a></span>, <span class='object_link'><a href="Porolog/Value.html" title="Porolog::Value (class)">Value</a></span>, <span class='object_link'><a href="Porolog/Variable.html" title="Porolog::Variable (class)">Variable</a></span>
|
109
|
+
<strong class="classes">Classes:</strong> <span class='object_link'><a href="Porolog/Arguments.html" title="Porolog::Arguments (class)">Arguments</a></span>, <span class='object_link'><a href="Porolog/Goal.html" title="Porolog::Goal (class)">Goal</a></span>, <span class='object_link'><a href="Porolog/Instantiation.html" title="Porolog::Instantiation (class)">Instantiation</a></span>, <span class='object_link'><a href="Porolog/NoGoalError.html" title="Porolog::NoGoalError (class)">NoGoalError</a></span>, <span class='object_link'><a href="Porolog/NonVariableError.html" title="Porolog::NonVariableError (class)">NonVariableError</a></span>, <span class='object_link'><a href="Porolog/PorologError.html" title="Porolog::PorologError (class)">PorologError</a></span>, <span class='object_link'><a href="Porolog/Predicate.html" title="Porolog::Predicate (class)">Predicate</a></span>, <span class='object_link'><a href="Porolog/Rule.html" title="Porolog::Rule (class)">Rule</a></span>, <span class='object_link'><a href="Porolog/Scope.html" title="Porolog::Scope (class)">Scope</a></span>, <span class='object_link'><a href="Porolog/Tail.html" title="Porolog::Tail (class)">Tail</a></span>, <span class='object_link'><a href="Porolog/Value.html" title="Porolog::Value (class)">Value</a></span>, <span class='object_link'><a href="Porolog/Variable.html" title="Porolog::Variable (class)">Variable</a></span>
|
110
110
|
|
111
111
|
|
112
112
|
</p>
|
@@ -133,7 +133,7 @@
|
|
133
133
|
|
134
134
|
</div>
|
135
135
|
</dt>
|
136
|
-
<dd><pre class="code"><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>0.0
|
136
|
+
<dd><pre class="code"><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>1.0.0</span><span class='tstring_end'>'</span></span><span class='period'>.</span><span class='id identifier rubyid_freeze'>freeze</span></pre></dd>
|
137
137
|
|
138
138
|
<dt id="VERSION_DATE-constant" class="">VERSION_DATE =
|
139
139
|
<div class="docstring">
|
@@ -149,7 +149,7 @@
|
|
149
149
|
|
150
150
|
</div>
|
151
151
|
</dt>
|
152
|
-
<dd><pre class="code"><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>2020-
|
152
|
+
<dd><pre class="code"><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>2020-08-02</span><span class='tstring_end'>'</span></span><span class='period'>.</span><span class='id identifier rubyid_freeze'>freeze</span></pre></dd>
|
153
153
|
|
154
154
|
<dt id="UNKNOWN_TAIL-constant" class="">UNKNOWN_TAIL =
|
155
155
|
<div class="docstring">
|
@@ -183,6 +183,22 @@
|
|
183
183
|
</dt>
|
184
184
|
<dd><pre class="code"><span class='lbracket'>[</span><span class='const'><span class='object_link'><a href="#UNKNOWN_TAIL-constant" title="Porolog::UNKNOWN_TAIL (constant)">UNKNOWN_TAIL</a></span></span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_freeze'>freeze</span></pre></dd>
|
185
185
|
|
186
|
+
<dt id="ANONYMOUS-constant" class="">ANONYMOUS =
|
187
|
+
<div class="docstring">
|
188
|
+
<div class="discussion">
|
189
|
+
|
190
|
+
<p>Stores the next unique anonymous variable name.</p>
|
191
|
+
|
192
|
+
|
193
|
+
</div>
|
194
|
+
</div>
|
195
|
+
<div class="tags">
|
196
|
+
|
197
|
+
|
198
|
+
</div>
|
199
|
+
</dt>
|
200
|
+
<dd><pre class="code"><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>_a</span><span class='tstring_end'>'</span></span><span class='rbracket'>]</span></pre></dd>
|
201
|
+
|
186
202
|
</dl>
|
187
203
|
|
188
204
|
|
@@ -203,6 +219,56 @@
|
|
203
219
|
<li class="public ">
|
204
220
|
<span class="summary_signature">
|
205
221
|
|
222
|
+
<a href="#anonymous-instance_method" title="#anonymous (instance method)">#<strong>anonymous</strong> ⇒ Symbol </a>
|
223
|
+
|
224
|
+
|
225
|
+
|
226
|
+
(also: #_)
|
227
|
+
|
228
|
+
</span>
|
229
|
+
|
230
|
+
|
231
|
+
|
232
|
+
|
233
|
+
|
234
|
+
|
235
|
+
|
236
|
+
|
237
|
+
|
238
|
+
<span class="summary_desc"><div class='inline'>
|
239
|
+
<p>A unique variable name.</p>
|
240
|
+
</div></span>
|
241
|
+
|
242
|
+
</li>
|
243
|
+
|
244
|
+
|
245
|
+
<li class="public ">
|
246
|
+
<span class="summary_signature">
|
247
|
+
|
248
|
+
<a href="#builtin-instance_method" title="#builtin (instance method)">#<strong>builtin</strong>(*names, class_base: Object) ⇒ Porolog::Predicate<sup>+</sup> </a>
|
249
|
+
|
250
|
+
|
251
|
+
|
252
|
+
</span>
|
253
|
+
|
254
|
+
|
255
|
+
|
256
|
+
|
257
|
+
|
258
|
+
|
259
|
+
|
260
|
+
|
261
|
+
|
262
|
+
<span class="summary_desc"><div class='inline'>
|
263
|
+
<p>A method to declare use of a standard / builtin Predicate, along with a method that returns an Arguments based on the arguments provided to the method.</p>
|
264
|
+
</div></span>
|
265
|
+
|
266
|
+
</li>
|
267
|
+
|
268
|
+
|
269
|
+
<li class="public ">
|
270
|
+
<span class="summary_signature">
|
271
|
+
|
206
272
|
<a href="#expand_splat-instance_method" title="#expand_splat (instance method)">#<strong>expand_splat</strong>(array) ⇒ Array </a>
|
207
273
|
|
208
274
|
|
@@ -275,7 +341,7 @@
|
|
275
341
|
<li class="public ">
|
276
342
|
<span class="summary_signature">
|
277
343
|
|
278
|
-
<a href="#predicate-instance_method" title="#predicate (instance method)">#<strong>predicate</strong>(*names) ⇒ Porolog::Predicate<sup>+</sup> </a>
|
344
|
+
<a href="#predicate-instance_method" title="#predicate (instance method)">#<strong>predicate</strong>(*names, class_base: Object) ⇒ Porolog::Predicate<sup>+</sup> </a>
|
279
345
|
|
280
346
|
|
281
347
|
|
@@ -419,7 +485,7 @@
|
|
419
485
|
<li class="public ">
|
420
486
|
<span class="summary_signature">
|
421
487
|
|
422
|
-
<a href="#unify_goals-instance_method" title="#unify_goals (instance method)">#<strong>unify_goals</strong>(goal, subgoal) ⇒
|
488
|
+
<a href="#unify_goals-instance_method" title="#unify_goals (instance method)">#<strong>unify_goals</strong>(goal, subgoal) ⇒ Array<Porolog::Instantiation>, ... </a>
|
423
489
|
|
424
490
|
|
425
491
|
|
@@ -546,57 +612,41 @@
|
|
546
612
|
|
547
613
|
|
548
614
|
<div class="method_details first">
|
549
|
-
<h3 class="signature first" id="
|
615
|
+
<h3 class="signature first" id="anonymous-instance_method">
|
550
616
|
|
551
|
-
#<strong>
|
617
|
+
#<strong>anonymous</strong> ⇒ <tt><span class='object_link'><a href="Symbol.html" title="Symbol (class)">Symbol</a></span></tt>
|
552
618
|
|
553
619
|
|
554
620
|
|
621
|
+
<span class="aliases">Also known as:
|
622
|
+
<span class="names"><span id='_-instance_method'>_</span></span>
|
623
|
+
</span>
|
624
|
+
|
555
625
|
|
556
626
|
|
557
627
|
</h3><div class="docstring">
|
558
628
|
<div class="discussion">
|
559
629
|
|
560
|
-
<p>
|
630
|
+
<p>Returns a unique variable name.</p>
|
561
631
|
|
562
632
|
|
563
633
|
</div>
|
564
634
|
</div>
|
565
635
|
<div class="tags">
|
566
|
-
<p class="tag_title">Parameters:</p>
|
567
|
-
<ul class="param">
|
568
|
-
|
569
|
-
<li>
|
570
|
-
|
571
|
-
<span class='name'>array</span>
|
572
|
-
|
573
|
-
|
574
|
-
<span class='type'>(<tt><span class='object_link'><a href="Array.html" title="Array (class)">Array</a></span></tt>)</span>
|
575
|
-
|
576
|
-
|
577
|
-
|
578
|
-
—
|
579
|
-
<div class='inline'>
|
580
|
-
<p>the given Array.</p>
|
581
|
-
</div>
|
582
|
-
|
583
|
-
</li>
|
584
636
|
|
585
|
-
</ul>
|
586
|
-
|
587
637
|
<p class="tag_title">Returns:</p>
|
588
638
|
<ul class="return">
|
589
639
|
|
590
640
|
<li>
|
591
641
|
|
592
642
|
|
593
|
-
<span class='type'>(<tt><span class='object_link'><a href="
|
643
|
+
<span class='type'>(<tt><span class='object_link'><a href="Symbol.html" title="Symbol (class)">Symbol</a></span></tt>)</span>
|
594
644
|
|
595
645
|
|
596
646
|
|
597
647
|
—
|
598
648
|
<div class='inline'>
|
599
|
-
<p>
|
649
|
+
<p>a unique variable name.</p>
|
600
650
|
</div>
|
601
651
|
|
602
652
|
</li>
|
@@ -609,39 +659,19 @@
|
|
609
659
|
<pre class="lines">
|
610
660
|
|
611
661
|
|
612
|
-
|
613
|
-
|
614
|
-
|
615
|
-
|
616
|
-
|
617
|
-
344
|
618
|
-
345
|
619
|
-
346
|
620
|
-
347
|
621
|
-
348
|
622
|
-
349
|
623
|
-
350
|
624
|
-
351
|
625
|
-
352
|
626
|
-
353</pre>
|
662
|
+
128
|
663
|
+
129
|
664
|
+
130
|
665
|
+
131
|
666
|
+
132</pre>
|
627
667
|
</td>
|
628
668
|
<td>
|
629
|
-
<pre class="code"><span class="info file"># File 'lib/porolog.rb', line
|
669
|
+
<pre class="code"><span class="info file"># File 'lib/porolog.rb', line 128</span>
|
630
670
|
|
631
|
-
<span class='kw'>def</span> <span class='id identifier
|
632
|
-
<span class='id identifier
|
633
|
-
|
634
|
-
<span class='
|
635
|
-
<span class='id identifier rubyid_array'>array</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='op'>*</span><span class='id identifier rubyid_array'>array</span><span class='lbracket'>[</span><span class='int'>0</span><span class='op'>...</span><span class='op'>-</span><span class='int'>1</span><span class='rbracket'>]</span><span class='comma'>,</span> <span class='op'>*</span><span class='id identifier rubyid_array'>array</span><span class='period'>.</span><span class='id identifier rubyid_last'>last</span><span class='period'>.</span><span class='id identifier rubyid_value'>value</span><span class='rbracket'>]</span>
|
636
|
-
<span class='kw'>end</span>
|
637
|
-
|
638
|
-
<span class='kw'>if</span> <span class='id identifier rubyid_array'>array</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'><span class='object_link'><a href="Array.html" title="Array (class)">Array</a></span></span><span class='rparen'>)</span>
|
639
|
-
<span class='id identifier rubyid_array'>array</span> <span class='op'>=</span> <span class='id identifier rubyid_array'>array</span><span class='period'>.</span><span class='id identifier rubyid_map'>map</span><span class='lbrace'>{</span><span class='op'>|</span><span class='id identifier rubyid_element'>element</span><span class='op'>|</span>
|
640
|
-
<span class='id identifier rubyid_expand_splat'>expand_splat</span><span class='lparen'>(</span><span class='id identifier rubyid_element'>element</span><span class='rparen'>)</span>
|
641
|
-
<span class='rbrace'>}</span>
|
642
|
-
<span class='kw'>end</span>
|
643
|
-
|
644
|
-
<span class='id identifier rubyid_array'>array</span>
|
671
|
+
<span class='kw'>def</span> <span class='id identifier rubyid_anonymous'>anonymous</span>
|
672
|
+
<span class='id identifier rubyid_anonymous'>anonymous</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="#ANONYMOUS-constant" title="Porolog::ANONYMOUS (constant)">ANONYMOUS</a></span></span><span class='lbracket'>[</span><span class='int'>0</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_to_sym'>to_sym</span>
|
673
|
+
<span class='const'><span class='object_link'><a href="#ANONYMOUS-constant" title="Porolog::ANONYMOUS (constant)">ANONYMOUS</a></span></span><span class='lbracket'>[</span><span class='int'>0</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_succ!'>succ!</span>
|
674
|
+
<span class='id identifier rubyid_anonymous'>anonymous</span>
|
645
675
|
<span class='kw'>end</span></pre>
|
646
676
|
</td>
|
647
677
|
</tr>
|
@@ -649,9 +679,9 @@
|
|
649
679
|
</div>
|
650
680
|
|
651
681
|
<div class="method_details ">
|
652
|
-
<h3 class="signature " id="
|
682
|
+
<h3 class="signature " id="builtin-instance_method">
|
653
683
|
|
654
|
-
#<strong>
|
684
|
+
#<strong>builtin</strong>(*names, class_base: Object) ⇒ <tt><span class='object_link'><a href="Porolog/Predicate.html" title="Porolog::Predicate (class)">Porolog::Predicate</a></span></tt><sup>+</sup>
|
655
685
|
|
656
686
|
|
657
687
|
|
@@ -660,137 +690,85 @@
|
|
660
690
|
</h3><div class="docstring">
|
661
691
|
<div class="discussion">
|
662
692
|
|
663
|
-
<p>
|
693
|
+
<p>A method to declare use of a standard / builtin Predicate, along with a method that returns an Arguments based on the arguments provided to the method.</p>
|
664
694
|
|
665
695
|
|
666
696
|
</div>
|
667
697
|
</div>
|
668
698
|
<div class="tags">
|
669
|
-
|
699
|
+
|
700
|
+
<div class="examples">
|
701
|
+
<p class="tag_title">Examples:</p>
|
702
|
+
|
703
|
+
|
704
|
+
<pre class="example code"><code><span class='id identifier rubyid_builtin'>builtin</span> <span class='symbol'>:is</span><span class='comma'>,</span> <span class='symbol'>:member</span><span class='comma'>,</span> <span class='symbol'>:append</span>
|
705
|
+
<span class='id identifier rubyid_member'>member</span><span class='lparen'>(</span><span class='symbol'>:e</span><span class='comma'>,</span><span class='symbol'>:l</span><span class='rparen'>)</span> <span class='comment'># --> Porolog::Arguments</span></code></pre>
|
706
|
+
|
707
|
+
</div>
|
708
|
+
<p class="tag_title">Parameters:</p>
|
670
709
|
<ul class="param">
|
671
710
|
|
672
711
|
<li>
|
673
712
|
|
674
|
-
<span class='name'>
|
713
|
+
<span class='name'>names</span>
|
675
714
|
|
676
715
|
|
677
|
-
<span class='type'>(<tt><span class='object_link'><a href="
|
716
|
+
<span class='type'>(<tt><span class='object_link'><a href="Array.html" title="Array (class)">Array</a></span><#to_sym></tt>)</span>
|
678
717
|
|
679
718
|
|
680
719
|
|
681
720
|
—
|
682
721
|
<div class='inline'>
|
683
|
-
<p>the
|
722
|
+
<p>names of the Predicates to declare.</p>
|
684
723
|
</div>
|
685
724
|
|
686
725
|
</li>
|
687
726
|
|
688
|
-
</ul>
|
689
|
-
|
690
|
-
<p class="tag_title">Returns:</p>
|
691
|
-
<ul class="return">
|
692
|
-
|
693
727
|
<li>
|
694
728
|
|
729
|
+
<span class='name'>class_base</span>
|
695
730
|
|
696
|
-
|
731
|
+
|
732
|
+
<span class='type'>(<tt>Class</tt>)</span>
|
697
733
|
|
698
734
|
|
699
735
|
|
700
736
|
—
|
701
737
|
<div class='inline'>
|
702
|
-
<p>
|
738
|
+
<p>class to define the method in.</p>
|
703
739
|
</div>
|
704
740
|
|
705
741
|
</li>
|
706
742
|
|
707
743
|
</ul>
|
708
744
|
|
709
|
-
|
710
|
-
|
711
|
-
<td>
|
712
|
-
<pre class="lines">
|
713
|
-
|
714
|
-
|
715
|
-
326
|
716
|
-
327
|
717
|
-
328
|
718
|
-
329
|
719
|
-
330
|
720
|
-
331
|
721
|
-
332
|
722
|
-
333
|
723
|
-
334</pre>
|
724
|
-
</td>
|
725
|
-
<td>
|
726
|
-
<pre class="code"><span class="info file"># File 'lib/porolog.rb', line 326</span>
|
727
|
-
|
728
|
-
<span class='kw'>def</span> <span class='id identifier rubyid_has_tail?'>has_tail?</span><span class='lparen'>(</span><span class='id identifier rubyid_value'>value</span><span class='comma'>,</span> <span class='id identifier rubyid_apply_value'>apply_value</span> <span class='op'>=</span> <span class='kw'>true</span><span class='rparen'>)</span>
|
729
|
-
<span class='id identifier rubyid_value'>value</span> <span class='op'>=</span> <span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_value'>value</span> <span class='kw'>if</span> <span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_respond_to?'>respond_to?</span><span class='lparen'>(</span><span class='symbol'>:value</span><span class='rparen'>)</span> <span class='op'>&&</span> <span class='id identifier rubyid_apply_value'>apply_value</span>
|
730
|
-
|
731
|
-
<span class='kw'>if</span> <span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'><span class='object_link'><a href="Array.html" title="Array (class)">Array</a></span></span><span class='rparen'>)</span>
|
732
|
-
<span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_last'>last</span> <span class='op'>==</span> <span class='const'><span class='object_link'><a href="#UNKNOWN_TAIL-constant" title="Porolog::UNKNOWN_TAIL (constant)">UNKNOWN_TAIL</a></span></span> <span class='op'>||</span> <span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_last'>last</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'><span class='object_link'><a href="Porolog/Tail.html" title="Porolog::Tail (class)">Tail</a></span></span><span class='rparen'>)</span>
|
733
|
-
<span class='kw'>else</span>
|
734
|
-
<span class='kw'>false</span>
|
735
|
-
<span class='kw'>end</span>
|
736
|
-
<span class='kw'>end</span></pre>
|
737
|
-
</td>
|
738
|
-
</tr>
|
739
|
-
</table>
|
740
|
-
</div>
|
741
|
-
|
742
|
-
<div class="method_details ">
|
743
|
-
<h3 class="signature " id="instantiate_unifications-instance_method">
|
744
|
-
|
745
|
-
#<strong>instantiate_unifications</strong>(unifications) ⇒ <tt>Boolean</tt>
|
746
|
-
|
747
|
-
|
748
|
-
|
749
|
-
|
750
|
-
|
751
|
-
</h3><div class="docstring">
|
752
|
-
<div class="discussion">
|
753
|
-
|
754
|
-
<p>Instantiates the unifications from an attempt to unify.</p>
|
755
|
-
|
756
|
-
|
757
|
-
</div>
|
758
|
-
</div>
|
759
|
-
<div class="tags">
|
760
|
-
<p class="tag_title">Parameters:</p>
|
761
|
-
<ul class="param">
|
745
|
+
<p class="tag_title">Returns:</p>
|
746
|
+
<ul class="return">
|
762
747
|
|
763
748
|
<li>
|
764
749
|
|
765
|
-
<span class='name'>unifications</span>
|
766
|
-
|
767
750
|
|
768
|
-
<span class='type'>(<tt><span class='object_link'><a href="
|
751
|
+
<span class='type'>(<tt><span class='object_link'><a href="Porolog/Predicate.html" title="Porolog::Predicate (class)">Porolog::Predicate</a></span></tt>)</span>
|
769
752
|
|
770
753
|
|
771
754
|
|
772
755
|
—
|
773
756
|
<div class='inline'>
|
774
|
-
<p>
|
757
|
+
<p>Predicate created if only one name is provided</p>
|
775
758
|
</div>
|
776
759
|
|
777
760
|
</li>
|
778
761
|
|
779
|
-
</ul>
|
780
|
-
|
781
|
-
<p class="tag_title">Returns:</p>
|
782
|
-
<ul class="return">
|
783
|
-
|
784
762
|
<li>
|
785
763
|
|
786
764
|
|
787
|
-
<span class='type'>(<tt>
|
765
|
+
<span class='type'>(<tt><span class='object_link'><a href="Array.html" title="Array (class)">Array</a></span><<span class='object_link'><a href="Porolog/Predicate.html" title="Porolog::Predicate (class)">Porolog::Predicate</a></span>></tt>)</span>
|
788
766
|
|
789
767
|
|
790
768
|
|
791
769
|
—
|
792
770
|
<div class='inline'>
|
793
|
-
<p>
|
771
|
+
<p>Predicates created if multiple names are provided</p>
|
794
772
|
</div>
|
795
773
|
|
796
774
|
</li>
|
@@ -839,55 +817,47 @@
|
|
839
817
|
122
|
840
818
|
123
|
841
819
|
124
|
842
|
-
125
|
843
|
-
126
|
844
|
-
127
|
845
|
-
128
|
846
|
-
129</pre>
|
820
|
+
125</pre>
|
847
821
|
</td>
|
848
822
|
<td>
|
849
823
|
<pre class="code"><span class="info file"># File 'lib/porolog.rb', line 89</span>
|
850
824
|
|
851
|
-
<span class='kw'>def</span> <span class='id identifier
|
852
|
-
<span class='
|
853
|
-
</span> <span class='id identifier rubyid_goals_variables'>goals_variables</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
|
854
|
-
|
855
|
-
<span class='id identifier rubyid_return_false'>return_false</span> <span class='op'>=</span> <span class='kw'>false</span>
|
856
|
-
<span class='id identifier rubyid_unifications'>unifications</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_unification'>unification</span><span class='op'>|</span>
|
857
|
-
<span class='id identifier rubyid_left'>left</span><span class='comma'>,</span> <span class='id identifier rubyid_right'>right</span><span class='comma'>,</span> <span class='id identifier rubyid_left_goal'>left_goal</span><span class='comma'>,</span> <span class='id identifier rubyid_right_goal'>right_goal</span> <span class='op'>=</span> <span class='id identifier rubyid_unification'>unification</span>
|
858
|
-
|
859
|
-
<span class='id identifier rubyid_goals_variables'>goals_variables</span><span class='lbracket'>[</span><span class='id identifier rubyid_left_goal'>left_goal</span><span class='rbracket'>]</span> <span class='op'>||=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
|
860
|
-
<span class='id identifier rubyid_goals_variables'>goals_variables</span><span class='lbracket'>[</span><span class='id identifier rubyid_left_goal'>left_goal</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='id identifier rubyid_left'>left</span><span class='rbracket'>]</span> <span class='op'>||=</span> <span class='lbracket'>[</span><span class='rbracket'>]</span>
|
861
|
-
<span class='id identifier rubyid_goals_variables'>goals_variables</span><span class='lbracket'>[</span><span class='id identifier rubyid_left_goal'>left_goal</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='id identifier rubyid_left'>left</span><span class='rbracket'>]</span> <span class='op'><<</span> <span class='lbracket'>[</span><span class='id identifier rubyid_right_goal'>right_goal</span><span class='comma'>,</span><span class='id identifier rubyid_right'>right</span><span class='rbracket'>]</span>
|
862
|
-
|
863
|
-
<span class='id identifier rubyid_return_false'>return_false</span> <span class='op'>=</span> <span class='kw'>true</span> <span class='kw'>if</span> <span class='id identifier rubyid_goals_variables'>goals_variables</span><span class='lbracket'>[</span><span class='id identifier rubyid_left_goal'>left_goal</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='id identifier rubyid_left'>left</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_map'>map</span><span class='lparen'>(</span><span class='op'>&</span><span class='symbol'>:last</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_reject'>reject</span><span class='lbrace'>{</span><span class='op'>|</span><span class='id identifier rubyid_value'>value</span><span class='op'>|</span>
|
864
|
-
<span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'><span class='object_link'><a href="Porolog/Variable.html" title="Porolog::Variable (class)">Variable</a></span></span><span class='rparen'>)</span> <span class='op'>||</span> <span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'><span class='object_link'><a href="Symbol.html" title="Symbol (class)">Symbol</a></span></span><span class='rparen'>)</span>
|
865
|
-
<span class='rbrace'>}</span><span class='period'>.</span><span class='id identifier rubyid_uniq'>uniq</span><span class='period'>.</span><span class='id identifier rubyid_size'>size</span> <span class='op'>></span> <span class='int'>1</span>
|
866
|
-
|
867
|
-
<span class='kw'>return</span> <span class='kw'>false</span> <span class='kw'>if</span> <span class='id identifier rubyid_return_false'>return_false</span>
|
868
|
-
<span class='kw'>end</span>
|
869
|
-
|
870
|
-
<span class='comment'># -- Make Instantiations --
|
871
|
-
</span> <span class='id identifier rubyid_instantiations'>instantiations</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='rbracket'>]</span>
|
872
|
-
<span class='id identifier rubyid_consistent'>consistent</span> <span class='op'>=</span> <span class='kw'>true</span>
|
825
|
+
<span class='kw'>def</span> <span class='id identifier rubyid_builtin'>builtin</span><span class='lparen'>(</span><span class='op'>*</span><span class='id identifier rubyid_names'>names</span><span class='comma'>,</span> <span class='label'>class_base:</span> <span class='const'><span class='object_link'><a href="Object.html" title="Object (class)">Object</a></span></span><span class='rparen'>)</span>
|
826
|
+
<span class='id identifier rubyid_names'>names</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='id identifier rubyid_names'>names</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_flatten'>flatten</span>
|
873
827
|
|
874
|
-
<span class='id identifier
|
875
|
-
<span class='id identifier
|
876
|
-
|
877
|
-
|
878
|
-
|
879
|
-
|
880
|
-
|
881
|
-
|
882
|
-
<span class='
|
883
|
-
|
828
|
+
<span class='id identifier rubyid_predicates'>predicates</span> <span class='op'>=</span> <span class='id identifier rubyid_names'>names</span><span class='period'>.</span><span class='id identifier rubyid_map'>map</span><span class='lbrace'>{</span><span class='op'>|</span><span class='id identifier rubyid_name'>name</span><span class='op'>|</span>
|
829
|
+
<span class='id identifier rubyid_method'>method</span> <span class='op'>=</span> <span class='id identifier rubyid_name'>name</span><span class='period'>.</span><span class='id identifier rubyid_to_sym'>to_sym</span>
|
830
|
+
<span class='id identifier rubyid_raise'>raise</span> <span class='const'>NameError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>Undefined builtin predicate </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_name'>name</span><span class='period'>.</span><span class='id identifier rubyid_inspect'>inspect</span><span class='embexpr_end'>}</span><span class='tstring_end'>"</span></span> <span class='kw'>unless</span> <span class='const'><span class='object_link'><a href="Porolog/Predicate.html" title="Porolog::Predicate (class)">Predicate</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Porolog/Predicate/Builtin.html" title="Porolog::Predicate::Builtin (module)">Builtin</a></span></span><span class='period'>.</span><span class='id identifier rubyid_instance_methods'>instance_methods</span><span class='period'>.</span><span class='id identifier rubyid_include?'>include?</span><span class='lparen'>(</span><span class='id identifier rubyid_method'>method</span><span class='rparen'>)</span>
|
831
|
+
<span class='id identifier rubyid_predicate'>predicate</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="Porolog/Predicate.html" title="Porolog::Predicate (class)">Predicate</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="Porolog/Predicate.html#new-class_method" title="Porolog::Predicate.new (method)">new</a></span></span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='comma'>,</span> <span class='label'>builtin:</span> <span class='kw'>true</span><span class='rparen'>)</span>
|
832
|
+
<span class='kw'>if</span> <span class='id identifier rubyid_class_base'>class_base</span> <span class='op'>==</span> <span class='const'><span class='object_link'><a href="Object.html" title="Object (class)">Object</a></span></span>
|
833
|
+
<span class='comment'># -- Add Global Method --
|
834
|
+
</span> <span class='id identifier rubyid_class_base'>class_base</span><span class='period'>.</span><span class='id identifier rubyid_class_eval'>class_eval</span><span class='lbrace'>{</span>
|
835
|
+
<span class='id identifier rubyid_remove_method'>remove_method</span><span class='lparen'>(</span><span class='id identifier rubyid_method'>method</span><span class='rparen'>)</span> <span class='kw'>if</span> <span class='id identifier rubyid_method_defined?'>method_defined?</span><span class='lparen'>(</span><span class='id identifier rubyid_method'>method</span><span class='rparen'>)</span>
|
836
|
+
<span class='id identifier rubyid_define_method'>define_method</span><span class='lparen'>(</span><span class='id identifier rubyid_method'>method</span><span class='rparen'>)</span><span class='lbrace'>{</span><span class='op'>|</span><span class='op'>*</span><span class='id identifier rubyid_args'>args</span><span class='comma'>,</span> <span class='op'>&</span><span class='id identifier rubyid_block'>block</span><span class='op'>|</span>
|
837
|
+
<span class='id identifier rubyid_predicate'>predicate</span><span class='period'>.</span><span class='lparen'>(</span><span class='op'>*</span><span class='id identifier rubyid_args'>args</span><span class='comma'>,</span> <span class='op'>&</span><span class='id identifier rubyid_block'>block</span><span class='rparen'>)</span>
|
838
|
+
<span class='rbrace'>}</span>
|
839
|
+
<span class='rbrace'>}</span>
|
840
|
+
<span class='kw'>else</span>
|
841
|
+
<span class='comment'># -- Add Instance Method --
|
842
|
+
</span> <span class='id identifier rubyid_class_base'>class_base</span><span class='period'>.</span><span class='id identifier rubyid_class_eval'>class_eval</span><span class='lbrace'>{</span>
|
843
|
+
<span class='id identifier rubyid_remove_method'>remove_method</span><span class='lparen'>(</span><span class='id identifier rubyid_method'>method</span><span class='rparen'>)</span> <span class='kw'>if</span> <span class='id identifier rubyid_methods'>methods</span><span class='lparen'>(</span><span class='kw'>false</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_include?'>include?</span><span class='lparen'>(</span><span class='id identifier rubyid_method'>method</span><span class='rparen'>)</span>
|
844
|
+
<span class='id identifier rubyid_define_method'>define_method</span><span class='lparen'>(</span><span class='id identifier rubyid_method'>method</span><span class='rparen'>)</span><span class='lbrace'>{</span><span class='op'>|</span><span class='op'>*</span><span class='id identifier rubyid_args'>args</span><span class='comma'>,</span> <span class='op'>&</span><span class='id identifier rubyid_block'>block</span><span class='op'>|</span>
|
845
|
+
<span class='id identifier rubyid_predicate'>predicate</span><span class='period'>.</span><span class='lparen'>(</span><span class='op'>*</span><span class='id identifier rubyid_args'>args</span><span class='comma'>,</span> <span class='op'>&</span><span class='id identifier rubyid_block'>block</span><span class='rparen'>)</span>
|
846
|
+
<span class='rbrace'>}</span>
|
847
|
+
<span class='rbrace'>}</span>
|
848
|
+
|
849
|
+
<span class='comment'># -- Add Class Method --
|
850
|
+
</span> <span class='lparen'>(</span><span class='kw'>class</span> <span class='op'><<</span> <span class='id identifier rubyid_class_base'>class_base</span><span class='semicolon'>;</span> <span class='kw'>self</span><span class='semicolon'>;</span> <span class='kw'>end</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_instance_eval'>instance_eval</span> <span class='lbrace'>{</span>
|
851
|
+
<span class='id identifier rubyid_remove_method'>remove_method</span><span class='lparen'>(</span><span class='id identifier rubyid_method'>method</span><span class='rparen'>)</span> <span class='kw'>if</span> <span class='id identifier rubyid_methods'>methods</span><span class='lparen'>(</span><span class='kw'>false</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_include?'>include?</span><span class='lparen'>(</span><span class='id identifier rubyid_method'>method</span><span class='rparen'>)</span>
|
852
|
+
<span class='id identifier rubyid_define_method'>define_method</span><span class='lparen'>(</span><span class='id identifier rubyid_method'>method</span><span class='rparen'>)</span><span class='lbrace'>{</span><span class='op'>|</span><span class='op'>*</span><span class='id identifier rubyid_args'>args</span><span class='comma'>,</span> <span class='op'>&</span><span class='id identifier rubyid_block'>block</span><span class='op'>|</span>
|
853
|
+
<span class='id identifier rubyid_predicate'>predicate</span><span class='period'>.</span><span class='lparen'>(</span><span class='op'>*</span><span class='id identifier rubyid_args'>args</span><span class='comma'>,</span> <span class='op'>&</span><span class='id identifier rubyid_block'>block</span><span class='rparen'>)</span>
|
854
|
+
<span class='rbrace'>}</span>
|
855
|
+
<span class='rbrace'>}</span>
|
884
856
|
<span class='kw'>end</span>
|
885
|
-
|
886
|
-
|
887
|
-
<span class='comment'># -- Revert if inconsistent --
|
888
|
-
</span> <span class='id identifier rubyid_instantiations'>instantiations</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span><span class='lparen'>(</span><span class='op'>&</span><span class='symbol'>:remove</span><span class='rparen'>)</span> <span class='kw'>unless</span> <span class='id identifier rubyid_consistent'>consistent</span>
|
857
|
+
<span class='id identifier rubyid_predicate'>predicate</span>
|
858
|
+
<span class='rbrace'>}</span>
|
889
859
|
|
890
|
-
<span class='id identifier
|
860
|
+
<span class='id identifier rubyid_predicates'>predicates</span><span class='period'>.</span><span class='id identifier rubyid_size'>size</span> <span class='op'>></span> <span class='int'>1</span> <span class='op'>&&</span> <span class='id identifier rubyid_predicates'>predicates</span> <span class='op'>||</span> <span class='id identifier rubyid_predicates'>predicates</span><span class='period'>.</span><span class='id identifier rubyid_first'>first</span>
|
891
861
|
<span class='kw'>end</span></pre>
|
892
862
|
</td>
|
893
863
|
</tr>
|
@@ -895,9 +865,9 @@
|
|
895
865
|
</div>
|
896
866
|
|
897
867
|
<div class="method_details ">
|
898
|
-
<h3 class="signature " id="
|
868
|
+
<h3 class="signature " id="expand_splat-instance_method">
|
899
869
|
|
900
|
-
#<strong>
|
870
|
+
#<strong>expand_splat</strong>(array) ⇒ <tt><span class='object_link'><a href="Array.html" title="Array (class)">Array</a></span></tt>
|
901
871
|
|
902
872
|
|
903
873
|
|
@@ -906,36 +876,27 @@
|
|
906
876
|
</h3><div class="docstring">
|
907
877
|
<div class="discussion">
|
908
878
|
|
909
|
-
<p>
|
879
|
+
<p>Expands a superfluous splat.</p>
|
910
880
|
|
911
881
|
|
912
882
|
</div>
|
913
883
|
</div>
|
914
884
|
<div class="tags">
|
915
|
-
|
916
|
-
|
917
|
-
<p class="tag_title">Examples:</p>
|
918
|
-
|
919
|
-
|
920
|
-
<pre class="example code"><code><span class='id identifier rubyid_predicate'>predicate</span> <span class='symbol'>:combobulator</span>
|
921
|
-
<span class='id identifier rubyid_combobulator'>combobulator</span><span class='lparen'>(</span><span class='symbol'>:x</span><span class='comma'>,</span><span class='symbol'>:y</span><span class='rparen'>)</span> <span class='comment'># --> Porolog::Arguments</span></code></pre>
|
922
|
-
|
923
|
-
</div>
|
924
|
-
<p class="tag_title">Parameters:</p>
|
925
|
-
<ul class="param">
|
885
|
+
<p class="tag_title">Parameters:</p>
|
886
|
+
<ul class="param">
|
926
887
|
|
927
888
|
<li>
|
928
889
|
|
929
|
-
<span class='name'>
|
890
|
+
<span class='name'>array</span>
|
930
891
|
|
931
892
|
|
932
|
-
<span class='type'>(<tt><span class='object_link'><a href="Array.html" title="Array (class)">Array</a></span
|
893
|
+
<span class='type'>(<tt><span class='object_link'><a href="Array.html" title="Array (class)">Array</a></span></tt>)</span>
|
933
894
|
|
934
895
|
|
935
896
|
|
936
897
|
—
|
937
898
|
<div class='inline'>
|
938
|
-
<p>
|
899
|
+
<p>the given Array.</p>
|
939
900
|
</div>
|
940
901
|
|
941
902
|
</li>
|
@@ -948,27 +909,13 @@
|
|
948
909
|
<li>
|
949
910
|
|
950
911
|
|
951
|
-
<span class='type'>(<tt><span class='object_link'><a href="
|
952
|
-
|
953
|
-
|
954
|
-
|
955
|
-
—
|
956
|
-
<div class='inline'>
|
957
|
-
<p>Predicate created if only one name is provided</p>
|
958
|
-
</div>
|
959
|
-
|
960
|
-
</li>
|
961
|
-
|
962
|
-
<li>
|
963
|
-
|
964
|
-
|
965
|
-
<span class='type'>(<tt><span class='object_link'><a href="Array.html" title="Array (class)">Array</a></span><<span class='object_link'><a href="Porolog/Predicate.html" title="Porolog::Predicate (class)">Porolog::Predicate</a></span>></tt>)</span>
|
912
|
+
<span class='type'>(<tt><span class='object_link'><a href="Array.html" title="Array (class)">Array</a></span></tt>)</span>
|
966
913
|
|
967
914
|
|
968
915
|
|
969
916
|
—
|
970
917
|
<div class='inline'>
|
971
|
-
<p>
|
918
|
+
<p>the given Array with any superfluous splats expanded.</p>
|
972
919
|
</div>
|
973
920
|
|
974
921
|
</li>
|
@@ -981,43 +928,39 @@
|
|
981
928
|
<pre class="lines">
|
982
929
|
|
983
930
|
|
984
|
-
|
985
|
-
|
986
|
-
|
987
|
-
|
988
|
-
|
989
|
-
|
990
|
-
|
991
|
-
|
992
|
-
|
993
|
-
|
994
|
-
|
995
|
-
|
996
|
-
|
997
|
-
|
998
|
-
|
999
|
-
60
|
1000
|
-
61</pre>
|
931
|
+
464
|
932
|
+
465
|
933
|
+
466
|
934
|
+
467
|
935
|
+
468
|
936
|
+
469
|
937
|
+
470
|
938
|
+
471
|
939
|
+
472
|
940
|
+
473
|
941
|
+
474
|
942
|
+
475
|
943
|
+
476
|
944
|
+
477
|
945
|
+
478</pre>
|
1001
946
|
</td>
|
1002
947
|
<td>
|
1003
|
-
<pre class="code"><span class="info file"># File 'lib/porolog.rb', line
|
948
|
+
<pre class="code"><span class="info file"># File 'lib/porolog.rb', line 464</span>
|
1004
949
|
|
1005
|
-
<span class='kw'>def</span> <span class='id identifier
|
1006
|
-
<span class='id identifier
|
950
|
+
<span class='kw'>def</span> <span class='id identifier rubyid_expand_splat'>expand_splat</span><span class='lparen'>(</span><span class='id identifier rubyid_array'>array</span><span class='rparen'>)</span>
|
951
|
+
<span class='id identifier rubyid_array'>array</span> <span class='op'>=</span> <span class='id identifier rubyid_array'>array</span><span class='period'>.</span><span class='id identifier rubyid_first'>first</span><span class='period'>.</span><span class='id identifier rubyid_value'>value</span> <span class='kw'>if</span> <span class='id identifier rubyid_array'>array</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'><span class='object_link'><a href="Array.html" title="Array (class)">Array</a></span></span><span class='rparen'>)</span> <span class='op'>&&</span> <span class='id identifier rubyid_array'>array</span><span class='period'>.</span><span class='id identifier rubyid_length'>length</span> <span class='op'>==</span> <span class='int'>1</span> <span class='op'>&&</span> <span class='id identifier rubyid_array'>array</span><span class='period'>.</span><span class='id identifier rubyid_first'>first</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'><span class='object_link'><a href="Porolog/Tail.html" title="Porolog::Tail (class)">Tail</a></span></span><span class='rparen'>)</span>
|
1007
952
|
|
1008
|
-
<span class='id identifier
|
1009
|
-
<span class='id identifier
|
1010
|
-
|
1011
|
-
|
1012
|
-
|
1013
|
-
|
1014
|
-
|
1015
|
-
<span class='rbrace'>}</span>
|
953
|
+
<span class='kw'>if</span> <span class='id identifier rubyid_array'>array</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'><span class='object_link'><a href="Array.html" title="Array (class)">Array</a></span></span><span class='rparen'>)</span> <span class='op'>&&</span> <span class='id identifier rubyid_array'>array</span><span class='period'>.</span><span class='id identifier rubyid_last'>last</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'><span class='object_link'><a href="Porolog/Tail.html" title="Porolog::Tail (class)">Tail</a></span></span><span class='rparen'>)</span> <span class='op'>&&</span> <span class='id identifier rubyid_array'>array</span><span class='period'>.</span><span class='id identifier rubyid_last'>last</span><span class='period'>.</span><span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'><span class='object_link'><a href="Array.html" title="Array (class)">Array</a></span></span><span class='rparen'>)</span>
|
954
|
+
<span class='id identifier rubyid_array'>array</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='op'>*</span><span class='id identifier rubyid_array'>array</span><span class='lbracket'>[</span><span class='int'>0</span><span class='op'>...</span><span class='op'>-</span><span class='int'>1</span><span class='rbracket'>]</span><span class='comma'>,</span> <span class='op'>*</span><span class='id identifier rubyid_array'>array</span><span class='period'>.</span><span class='id identifier rubyid_last'>last</span><span class='period'>.</span><span class='id identifier rubyid_value'>value</span><span class='rbracket'>]</span>
|
955
|
+
<span class='kw'>end</span>
|
956
|
+
|
957
|
+
<span class='kw'>if</span> <span class='id identifier rubyid_array'>array</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'><span class='object_link'><a href="Array.html" title="Array (class)">Array</a></span></span><span class='rparen'>)</span>
|
958
|
+
<span class='id identifier rubyid_array'>array</span> <span class='op'>=</span> <span class='id identifier rubyid_array'>array</span><span class='period'>.</span><span class='id identifier rubyid_map'>map</span><span class='lbrace'>{</span><span class='op'>|</span><span class='id identifier rubyid_element'>element</span><span class='op'>|</span>
|
959
|
+
<span class='id identifier rubyid_expand_splat'>expand_splat</span><span class='lparen'>(</span><span class='id identifier rubyid_element'>element</span><span class='rparen'>)</span>
|
1016
960
|
<span class='rbrace'>}</span>
|
1017
|
-
|
1018
|
-
<span class='rbrace'>}</span>
|
961
|
+
<span class='kw'>end</span>
|
1019
962
|
|
1020
|
-
<span class='id identifier
|
963
|
+
<span class='id identifier rubyid_array'>array</span>
|
1021
964
|
<span class='kw'>end</span></pre>
|
1022
965
|
</td>
|
1023
966
|
</tr>
|
@@ -1025,9 +968,9 @@
|
|
1025
968
|
</div>
|
1026
969
|
|
1027
970
|
<div class="method_details ">
|
1028
|
-
<h3 class="signature " id="
|
971
|
+
<h3 class="signature " id="has_tail?-instance_method">
|
1029
972
|
|
1030
|
-
#<strong>
|
973
|
+
#<strong>has_tail?</strong>(value, apply_value = true) ⇒ <tt>Boolean</tt>
|
1031
974
|
|
1032
975
|
|
1033
976
|
|
@@ -1036,7 +979,7 @@
|
|
1036
979
|
</h3><div class="docstring">
|
1037
980
|
<div class="discussion">
|
1038
981
|
|
1039
|
-
<p>
|
982
|
+
<p>Returns whether the provided value has a Tail.</p>
|
1040
983
|
|
1041
984
|
|
1042
985
|
</div>
|
@@ -1047,7 +990,7 @@
|
|
1047
990
|
|
1048
991
|
<li>
|
1049
992
|
|
1050
|
-
<span class='name'>
|
993
|
+
<span class='name'>value</span>
|
1051
994
|
|
1052
995
|
|
1053
996
|
<span class='type'>(<tt><span class='object_link'><a href="Object.html" title="Object (class)">Object</a></span></tt>)</span>
|
@@ -1056,75 +999,98 @@
|
|
1056
999
|
|
1057
1000
|
—
|
1058
1001
|
<div class='inline'>
|
1059
|
-
<p>
|
1002
|
+
<p>the provided value.</p>
|
1060
1003
|
</div>
|
1061
1004
|
|
1062
1005
|
</li>
|
1063
1006
|
|
1007
|
+
</ul>
|
1008
|
+
|
1009
|
+
<p class="tag_title">Returns:</p>
|
1010
|
+
<ul class="return">
|
1011
|
+
|
1064
1012
|
<li>
|
1065
1013
|
|
1066
|
-
<span class='name'>right</span>
|
1067
|
-
|
1068
1014
|
|
1069
|
-
<span class='type'>(<tt
|
1015
|
+
<span class='type'>(<tt>Boolean</tt>)</span>
|
1070
1016
|
|
1071
1017
|
|
1072
1018
|
|
1073
1019
|
—
|
1074
1020
|
<div class='inline'>
|
1075
|
-
<p>
|
1021
|
+
<p>whether the provided value has a Tail.</p>
|
1076
1022
|
</div>
|
1077
1023
|
|
1078
1024
|
</li>
|
1079
1025
|
|
1080
|
-
|
1081
|
-
|
1082
|
-
|
1083
|
-
|
1084
|
-
|
1085
|
-
|
1086
|
-
|
1087
|
-
|
1088
|
-
|
1089
|
-
|
1090
|
-
|
1091
|
-
|
1026
|
+
</ul>
|
1027
|
+
|
1028
|
+
</div><table class="source_code">
|
1029
|
+
<tr>
|
1030
|
+
<td>
|
1031
|
+
<pre class="lines">
|
1032
|
+
|
1033
|
+
|
1034
|
+
451
|
1035
|
+
452
|
1036
|
+
453
|
1037
|
+
454
|
1038
|
+
455
|
1039
|
+
456
|
1040
|
+
457
|
1041
|
+
458
|
1042
|
+
459</pre>
|
1043
|
+
</td>
|
1044
|
+
<td>
|
1045
|
+
<pre class="code"><span class="info file"># File 'lib/porolog.rb', line 451</span>
|
1046
|
+
|
1047
|
+
<span class='kw'>def</span> <span class='id identifier rubyid_has_tail?'>has_tail?</span><span class='lparen'>(</span><span class='id identifier rubyid_value'>value</span><span class='comma'>,</span> <span class='id identifier rubyid_apply_value'>apply_value</span> <span class='op'>=</span> <span class='kw'>true</span><span class='rparen'>)</span>
|
1048
|
+
<span class='id identifier rubyid_value'>value</span> <span class='op'>=</span> <span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_value'>value</span> <span class='kw'>if</span> <span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_respond_to?'>respond_to?</span><span class='lparen'>(</span><span class='symbol'>:value</span><span class='rparen'>)</span> <span class='op'>&&</span> <span class='id identifier rubyid_apply_value'>apply_value</span>
|
1049
|
+
|
1050
|
+
<span class='kw'>if</span> <span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'><span class='object_link'><a href="Array.html" title="Array (class)">Array</a></span></span><span class='rparen'>)</span>
|
1051
|
+
<span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_last'>last</span> <span class='op'>==</span> <span class='const'><span class='object_link'><a href="#UNKNOWN_TAIL-constant" title="Porolog::UNKNOWN_TAIL (constant)">UNKNOWN_TAIL</a></span></span> <span class='op'>||</span> <span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_last'>last</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'><span class='object_link'><a href="Porolog/Tail.html" title="Porolog::Tail (class)">Tail</a></span></span><span class='rparen'>)</span>
|
1052
|
+
<span class='kw'>else</span>
|
1053
|
+
<span class='kw'>false</span>
|
1054
|
+
<span class='kw'>end</span>
|
1055
|
+
<span class='kw'>end</span></pre>
|
1056
|
+
</td>
|
1057
|
+
</tr>
|
1058
|
+
</table>
|
1092
1059
|
</div>
|
1093
|
-
|
1094
|
-
|
1060
|
+
|
1061
|
+
<div class="method_details ">
|
1062
|
+
<h3 class="signature " id="instantiate_unifications-instance_method">
|
1095
1063
|
|
1096
|
-
<
|
1097
|
-
|
1098
|
-
|
1099
|
-
|
1100
|
-
|
1101
|
-
|
1102
|
-
|
1103
|
-
|
1104
|
-
|
1105
|
-
|
1106
|
-
|
1107
|
-
|
1108
|
-
|
1109
|
-
<p>goal of right hand side entity.</p>
|
1064
|
+
#<strong>instantiate_unifications</strong>(unifications) ⇒ <tt>Boolean</tt>
|
1065
|
+
|
1066
|
+
|
1067
|
+
|
1068
|
+
|
1069
|
+
|
1070
|
+
</h3><div class="docstring">
|
1071
|
+
<div class="discussion">
|
1072
|
+
|
1073
|
+
<p>Instantiates the unifications from an attempt to unify.</p>
|
1074
|
+
|
1075
|
+
|
1076
|
+
</div>
|
1110
1077
|
</div>
|
1111
|
-
|
1112
|
-
|
1078
|
+
<div class="tags">
|
1079
|
+
<p class="tag_title">Parameters:</p>
|
1080
|
+
<ul class="param">
|
1113
1081
|
|
1114
1082
|
<li>
|
1115
1083
|
|
1116
|
-
<span class='name'>
|
1084
|
+
<span class='name'>unifications</span>
|
1117
1085
|
|
1118
1086
|
|
1119
1087
|
<span class='type'>(<tt><span class='object_link'><a href="Array.html" title="Array (class)">Array</a></span></tt>)</span>
|
1120
1088
|
|
1121
1089
|
|
1122
|
-
<em class="default">(defaults to: <tt>[]</tt>)</em>
|
1123
|
-
|
1124
1090
|
|
1125
1091
|
—
|
1126
1092
|
<div class='inline'>
|
1127
|
-
<p>
|
1093
|
+
<p>unifications to instantiate.</p>
|
1128
1094
|
</div>
|
1129
1095
|
|
1130
1096
|
</li>
|
@@ -1137,27 +1103,13 @@
|
|
1137
1103
|
<li>
|
1138
1104
|
|
1139
1105
|
|
1140
|
-
<span class='type'>(<tt
|
1141
|
-
|
1142
|
-
|
1143
|
-
|
1144
|
-
—
|
1145
|
-
<div class='inline'>
|
1146
|
-
<p>an Array of unifications when the left hand side can be unified with the right hand.</p>
|
1147
|
-
</div>
|
1148
|
-
|
1149
|
-
</li>
|
1150
|
-
|
1151
|
-
<li>
|
1152
|
-
|
1153
|
-
|
1154
|
-
<span class='type'>(<tt>nil</tt>)</span>
|
1106
|
+
<span class='type'>(<tt>Boolean</tt>)</span>
|
1155
1107
|
|
1156
1108
|
|
1157
1109
|
|
1158
1110
|
—
|
1159
1111
|
<div class='inline'>
|
1160
|
-
<p>
|
1112
|
+
<p>whether the instantiations could be made.</p>
|
1161
1113
|
</div>
|
1162
1114
|
|
1163
1115
|
</li>
|
@@ -1170,31 +1122,6 @@
|
|
1170
1122
|
<pre class="lines">
|
1171
1123
|
|
1172
1124
|
|
1173
|
-
139
|
1174
|
-
140
|
1175
|
-
141
|
1176
|
-
142
|
1177
|
-
143
|
1178
|
-
144
|
1179
|
-
145
|
1180
|
-
146
|
1181
|
-
147
|
1182
|
-
148
|
1183
|
-
149
|
1184
|
-
150
|
1185
|
-
151
|
1186
|
-
152
|
1187
|
-
153
|
1188
|
-
154
|
1189
|
-
155
|
1190
|
-
156
|
1191
|
-
157
|
1192
|
-
158
|
1193
|
-
159
|
1194
|
-
160
|
1195
|
-
161
|
1196
|
-
162
|
1197
|
-
163
|
1198
1125
|
164
|
1199
1126
|
165
|
1200
1127
|
166
|
@@ -1259,56 +1186,548 @@
|
|
1259
1186
|
225
|
1260
1187
|
226
|
1261
1188
|
227
|
1262
|
-
228
|
1263
|
-
229
|
1264
|
-
230
|
1265
|
-
231
|
1266
|
-
232
|
1267
|
-
233
|
1268
|
-
234
|
1269
|
-
235
|
1270
|
-
236
|
1271
|
-
237
|
1272
|
-
238
|
1273
|
-
239
|
1274
|
-
240
|
1275
|
-
241
|
1276
|
-
242
|
1277
|
-
243
|
1278
|
-
244
|
1279
|
-
245
|
1280
|
-
246
|
1281
|
-
247
|
1282
|
-
248
|
1283
|
-
249
|
1284
|
-
250
|
1285
|
-
251</pre>
|
1189
|
+
228</pre>
|
1286
1190
|
</td>
|
1287
1191
|
<td>
|
1288
|
-
<pre class="code"><span class="info file"># File 'lib/porolog.rb', line
|
1192
|
+
<pre class="code"><span class="info file"># File 'lib/porolog.rb', line 164</span>
|
1289
1193
|
|
1290
|
-
<span class='kw'>def</span> <span class='id identifier
|
1291
|
-
<span class='
|
1292
|
-
<span class='id identifier
|
1293
|
-
<span class='id identifier rubyid_signature'>signature</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='id identifier rubyid_left'>left</span><span class='period'>.</span><span class='id identifier rubyid_type'>type</span><span class='comma'>,</span> <span class='id identifier rubyid_right'>right</span><span class='period'>.</span><span class='id identifier rubyid_type'>type</span><span class='rbracket'>]</span>
|
1294
|
-
|
1295
|
-
<span class='comment'># -- Nil is Uninstantiated (can always unify) --
|
1296
|
-
</span> <span class='kw'>return</span> <span class='lbracket'>[</span><span class='rbracket'>]</span> <span class='kw'>unless</span> <span class='id identifier rubyid_left'>left</span> <span class='op'>&&</span> <span class='id identifier rubyid_right'>right</span>
|
1194
|
+
<span class='kw'>def</span> <span class='id identifier rubyid_instantiate_unifications'>instantiate_unifications</span><span class='lparen'>(</span><span class='id identifier rubyid_unifications'>unifications</span><span class='rparen'>)</span>
|
1195
|
+
<span class='comment'># -- Gather Unifications --
|
1196
|
+
</span> <span class='id identifier rubyid_goals_variables'>goals_variables</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
|
1297
1197
|
|
1298
|
-
<span class='
|
1299
|
-
</span>
|
1300
|
-
<span class='
|
1301
|
-
<span class='kw'>if</span> <span class='id identifier rubyid_left'>left</span> <span class='op'>==</span> <span class='id identifier rubyid_right'>right</span>
|
1302
|
-
<span class='lbracket'>[</span><span class='rbracket'>]</span>
|
1303
|
-
<span class='kw'>else</span>
|
1304
|
-
<span class='id identifier rubyid_msg'>msg</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>Cannot unify because </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_left'>left</span><span class='period'>.</span><span class='id identifier rubyid_inspect'>inspect</span><span class='embexpr_end'>}</span><span class='tstring_content'> != </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_right'>right</span><span class='period'>.</span><span class='id identifier rubyid_inspect'>inspect</span><span class='embexpr_end'>}</span><span class='tstring_content'> (atomic != atomic)</span><span class='tstring_end'>"</span></span>
|
1305
|
-
<span class='id identifier rubyid_goals'>goals</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span><span class='lbrace'>{</span><span class='op'>|</span><span class='id identifier rubyid_goal'>goal</span><span class='op'>|</span> <span class='id identifier rubyid_goal'>goal</span><span class='period'>.</span><span class='id identifier rubyid_log'>log</span> <span class='op'><<</span> <span class='id identifier rubyid_msg'>msg</span> <span class='rbrace'>}</span>
|
1306
|
-
<span class='kw'>nil</span>
|
1307
|
-
<span class='kw'>end</span>
|
1198
|
+
<span class='id identifier rubyid_return_false'>return_false</span> <span class='op'>=</span> <span class='kw'>false</span>
|
1199
|
+
<span class='id identifier rubyid_unifications'>unifications</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_unification'>unification</span><span class='op'>|</span>
|
1200
|
+
<span class='id identifier rubyid_left'>left</span><span class='comma'>,</span> <span class='id identifier rubyid_right'>right</span><span class='comma'>,</span> <span class='id identifier rubyid_left_goal'>left_goal</span><span class='comma'>,</span> <span class='id identifier rubyid_right_goal'>right_goal</span> <span class='op'>=</span> <span class='id identifier rubyid_unification'>unification</span>
|
1308
1201
|
|
1309
|
-
<span class='
|
1310
|
-
|
1311
|
-
|
1202
|
+
<span class='id identifier rubyid_goals_variables'>goals_variables</span><span class='lbracket'>[</span><span class='id identifier rubyid_left_goal'>left_goal</span><span class='rbracket'>]</span> <span class='op'>||=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
|
1203
|
+
<span class='id identifier rubyid_goals_variables'>goals_variables</span><span class='lbracket'>[</span><span class='id identifier rubyid_left_goal'>left_goal</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='id identifier rubyid_left'>left</span><span class='rbracket'>]</span> <span class='op'>||=</span> <span class='lbracket'>[</span><span class='rbracket'>]</span>
|
1204
|
+
<span class='id identifier rubyid_goals_variables'>goals_variables</span><span class='lbracket'>[</span><span class='id identifier rubyid_left_goal'>left_goal</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='id identifier rubyid_left'>left</span><span class='rbracket'>]</span> <span class='op'><<</span> <span class='lbracket'>[</span><span class='id identifier rubyid_right_goal'>right_goal</span><span class='comma'>,</span><span class='id identifier rubyid_right'>right</span><span class='rbracket'>]</span>
|
1205
|
+
|
1206
|
+
<span class='comment'># -- Check Consistency --
|
1207
|
+
</span> <span class='id identifier rubyid_goals_variables'>goals_variables</span><span class='lbracket'>[</span><span class='id identifier rubyid_left_goal'>left_goal</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='id identifier rubyid_left'>left</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_map'>map</span><span class='lparen'>(</span><span class='op'>&</span><span class='symbol'>:last</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_map'>map</span><span class='lparen'>(</span><span class='op'>&</span><span class='symbol'>:value</span><span class='rparen'>)</span>
|
1208
|
+
<span class='id identifier rubyid_values'>values</span> <span class='op'>=</span> <span class='id identifier rubyid_goals_variables'>goals_variables</span><span class='lbracket'>[</span><span class='id identifier rubyid_left_goal'>left_goal</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='id identifier rubyid_left'>left</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_map'>map</span><span class='lbrace'>{</span><span class='op'>|</span><span class='id identifier rubyid_value'>value</span><span class='op'>|</span>
|
1209
|
+
<span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_last'>last</span><span class='period'>.</span><span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_value'>value</span>
|
1210
|
+
<span class='rbrace'>}</span>
|
1211
|
+
<span class='kw'>next</span> <span class='kw'>if</span> <span class='id identifier rubyid_values'>values</span><span class='period'>.</span><span class='id identifier rubyid_size'>size</span> <span class='op'><</span> <span class='int'>2</span>
|
1212
|
+
|
1213
|
+
<span class='id identifier rubyid_arrays'>arrays</span> <span class='op'>=</span> <span class='id identifier rubyid_values'>values</span><span class='period'>.</span><span class='id identifier rubyid_any?'>any?</span><span class='lbrace'>{</span><span class='op'>|</span><span class='id identifier rubyid_value'>value</span><span class='op'>|</span> <span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'><span class='object_link'><a href="Array.html" title="Array (class)">Array</a></span></span><span class='rparen'>)</span> <span class='rbrace'>}</span>
|
1214
|
+
<span class='kw'>if</span> <span class='id identifier rubyid_arrays'>arrays</span> <span class='op'>&&</span> <span class='op'>!</span><span class='id identifier rubyid_values'>values</span><span class='period'>.</span><span class='id identifier rubyid_variables'>variables</span><span class='period'>.</span><span class='id identifier rubyid_empty?'>empty?</span>
|
1215
|
+
<span class='id identifier rubyid_zipped_values'>zipped_values</span> <span class='op'>=</span> <span class='id identifier rubyid_values'>values</span><span class='lbracket'>[</span><span class='int'>0</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_zip'>zip</span><span class='lparen'>(</span><span class='op'>*</span><span class='id identifier rubyid_values'>values</span><span class='lbracket'>[</span><span class='int'>1</span><span class='op'>..</span><span class='op'>-</span><span class='int'>1</span><span class='rbracket'>]</span><span class='rparen'>)</span>
|
1216
|
+
<span class='id identifier rubyid_zipped_values'>zipped_values</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_zipped_value'>zipped_value</span><span class='op'>|</span>
|
1217
|
+
<span class='id identifier rubyid_vars'>vars</span><span class='comma'>,</span> <span class='id identifier rubyid_atomics'>atomics</span> <span class='op'>=</span> <span class='id identifier rubyid_zipped_value'>zipped_value</span><span class='period'>.</span><span class='id identifier rubyid_partition'>partition</span><span class='lbrace'>{</span><span class='op'>|</span><span class='id identifier rubyid_v'>v</span><span class='op'>|</span> <span class='id identifier rubyid_v'>v</span><span class='period'>.</span><span class='id identifier rubyid_type'>type</span> <span class='op'>==</span> <span class='symbol'>:variable</span> <span class='rbrace'>}</span>
|
1218
|
+
<span class='id identifier rubyid_return_false'>return_false</span> <span class='op'>=</span> <span class='kw'>true</span> <span class='kw'>if</span> <span class='id identifier rubyid_atomics'>atomics</span><span class='period'>.</span><span class='id identifier rubyid_uniq'>uniq</span><span class='period'>.</span><span class='id identifier rubyid_size'>size</span> <span class='op'>></span> <span class='int'>1</span>
|
1219
|
+
<span class='id identifier rubyid_vars'>vars</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_var'>var</span><span class='op'>|</span>
|
1220
|
+
<span class='id identifier rubyid_goals_variables'>goals_variables</span><span class='lbracket'>[</span><span class='id identifier rubyid_var'>var</span><span class='period'>.</span><span class='id identifier rubyid_goal'>goal</span><span class='rbracket'>]</span> <span class='op'>||=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
|
1221
|
+
<span class='id identifier rubyid_goals_variables'>goals_variables</span><span class='lbracket'>[</span><span class='id identifier rubyid_var'>var</span><span class='period'>.</span><span class='id identifier rubyid_goal'>goal</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='id identifier rubyid_var'>var</span><span class='rbracket'>]</span> <span class='op'>||=</span> <span class='lbracket'>[</span><span class='rbracket'>]</span>
|
1222
|
+
<span class='id identifier rubyid_goals_variables'>goals_variables</span><span class='lbracket'>[</span><span class='id identifier rubyid_var'>var</span><span class='period'>.</span><span class='id identifier rubyid_goal'>goal</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='id identifier rubyid_var'>var</span><span class='rbracket'>]</span> <span class='op'><<</span> <span class='lbracket'>[</span><span class='lparen'>(</span><span class='lbracket'>[</span><span class='id identifier rubyid_left_goal'>left_goal</span><span class='comma'>,</span><span class='id identifier rubyid_right_goal'>right_goal</span><span class='rbracket'>]</span><span class='op'>-</span><span class='lbracket'>[</span><span class='id identifier rubyid_var'>var</span><span class='period'>.</span><span class='id identifier rubyid_goal'>goal</span><span class='rbracket'>]</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_first'>first</span><span class='comma'>,</span><span class='id identifier rubyid_atomics'>atomics</span><span class='period'>.</span><span class='id identifier rubyid_first'>first</span><span class='rbracket'>]</span>
|
1223
|
+
<span class='kw'>end</span>
|
1224
|
+
<span class='kw'>end</span>
|
1225
|
+
<span class='kw'>else</span>
|
1226
|
+
<span class='id identifier rubyid_return_false'>return_false</span> <span class='op'>=</span> <span class='id identifier rubyid_values'>values</span><span class='period'>.</span><span class='id identifier rubyid_reject'>reject</span><span class='lbrace'>{</span><span class='op'>|</span><span class='id identifier rubyid_value'>value</span><span class='op'>|</span>
|
1227
|
+
<span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'><span class='object_link'><a href="Porolog/Variable.html" title="Porolog::Variable (class)">Variable</a></span></span><span class='rparen'>)</span> <span class='op'>||</span> <span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'><span class='object_link'><a href="Symbol.html" title="Symbol (class)">Symbol</a></span></span><span class='rparen'>)</span>
|
1228
|
+
<span class='rbrace'>}</span><span class='period'>.</span><span class='id identifier rubyid_uniq'>uniq</span><span class='period'>.</span><span class='id identifier rubyid_size'>size</span> <span class='op'>></span> <span class='int'>1</span>
|
1229
|
+
<span class='kw'>end</span>
|
1230
|
+
|
1231
|
+
<span class='kw'>return</span> <span class='kw'>false</span> <span class='kw'>if</span> <span class='id identifier rubyid_return_false'>return_false</span>
|
1232
|
+
<span class='kw'>end</span>
|
1233
|
+
|
1234
|
+
<span class='comment'># -- Make Instantiations --
|
1235
|
+
</span> <span class='id identifier rubyid_instantiations'>instantiations</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='rbracket'>]</span>
|
1236
|
+
<span class='id identifier rubyid_consistent'>consistent</span> <span class='op'>=</span> <span class='kw'>true</span>
|
1237
|
+
|
1238
|
+
<span class='id identifier rubyid_goals_variables'>goals_variables</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_goal'>goal</span><span class='comma'>,</span> <span class='id identifier rubyid_variables'>variables</span><span class='op'>|</span>
|
1239
|
+
<span class='id identifier rubyid_variables'>variables</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_name'>name</span><span class='comma'>,</span> <span class='id identifier rubyid_others'>others</span><span class='op'>|</span>
|
1240
|
+
<span class='id identifier rubyid_others'>others</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_other_goal'>other_goal</span><span class='comma'>,</span> <span class='id identifier rubyid_other'>other</span><span class='op'>|</span>
|
1241
|
+
<span class='id identifier rubyid_instantiation'>instantiation</span> <span class='op'>=</span> <span class='id identifier rubyid_goal'>goal</span><span class='period'>.</span><span class='id identifier rubyid_instantiate'>instantiate</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='comma'>,</span> <span class='id identifier rubyid_other'>other</span><span class='comma'>,</span> <span class='id identifier rubyid_other_goal'>other_goal</span><span class='rparen'>)</span>
|
1242
|
+
<span class='kw'>if</span> <span class='id identifier rubyid_instantiation'>instantiation</span>
|
1243
|
+
<span class='id identifier rubyid_instantiations'>instantiations</span> <span class='op'><<</span> <span class='id identifier rubyid_instantiation'>instantiation</span>
|
1244
|
+
<span class='kw'>else</span>
|
1245
|
+
<span class='id identifier rubyid_consistent'>consistent</span> <span class='op'>=</span> <span class='kw'>false</span>
|
1246
|
+
<span class='kw'>end</span>
|
1247
|
+
<span class='kw'>end</span>
|
1248
|
+
<span class='kw'>end</span>
|
1249
|
+
<span class='kw'>end</span>
|
1250
|
+
|
1251
|
+
<span class='comment'># -- Revert if inconsistent --
|
1252
|
+
</span> <span class='kw'>if</span> <span class='id identifier rubyid_consistent'>consistent</span>
|
1253
|
+
<span class='id identifier rubyid_instantiations'>instantiations</span>
|
1254
|
+
<span class='kw'>else</span>
|
1255
|
+
<span class='id identifier rubyid_instantiations'>instantiations</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span><span class='lparen'>(</span><span class='op'>&</span><span class='symbol'>:remove</span><span class='rparen'>)</span>
|
1256
|
+
<span class='kw'>nil</span>
|
1257
|
+
<span class='kw'>end</span>
|
1258
|
+
<span class='kw'>end</span></pre>
|
1259
|
+
</td>
|
1260
|
+
</tr>
|
1261
|
+
</table>
|
1262
|
+
</div>
|
1263
|
+
|
1264
|
+
<div class="method_details ">
|
1265
|
+
<h3 class="signature " id="predicate-instance_method">
|
1266
|
+
|
1267
|
+
#<strong>predicate</strong>(*names, class_base: Object) ⇒ <tt><span class='object_link'><a href="Porolog/Predicate.html" title="Porolog::Predicate (class)">Porolog::Predicate</a></span></tt><sup>+</sup>
|
1268
|
+
|
1269
|
+
|
1270
|
+
|
1271
|
+
|
1272
|
+
|
1273
|
+
</h3><div class="docstring">
|
1274
|
+
<div class="discussion">
|
1275
|
+
|
1276
|
+
<p>A convenience method to create a Predicate, along with a method that returns an Arguments based on the arguments provided to the method.</p>
|
1277
|
+
|
1278
|
+
|
1279
|
+
</div>
|
1280
|
+
</div>
|
1281
|
+
<div class="tags">
|
1282
|
+
|
1283
|
+
<div class="examples">
|
1284
|
+
<p class="tag_title">Examples:</p>
|
1285
|
+
|
1286
|
+
|
1287
|
+
<pre class="example code"><code><span class='id identifier rubyid_predicate'>predicate</span> <span class='symbol'>:combobulator</span>
|
1288
|
+
<span class='id identifier rubyid_combobulator'>combobulator</span><span class='lparen'>(</span><span class='symbol'>:x</span><span class='comma'>,</span><span class='symbol'>:y</span><span class='rparen'>)</span> <span class='comment'># --> Porolog::Arguments</span></code></pre>
|
1289
|
+
|
1290
|
+
</div>
|
1291
|
+
<p class="tag_title">Parameters:</p>
|
1292
|
+
<ul class="param">
|
1293
|
+
|
1294
|
+
<li>
|
1295
|
+
|
1296
|
+
<span class='name'>names</span>
|
1297
|
+
|
1298
|
+
|
1299
|
+
<span class='type'>(<tt><span class='object_link'><a href="Array.html" title="Array (class)">Array</a></span><#to_sym></tt>)</span>
|
1300
|
+
|
1301
|
+
|
1302
|
+
|
1303
|
+
—
|
1304
|
+
<div class='inline'>
|
1305
|
+
<p>names of the Predicates to create.</p>
|
1306
|
+
</div>
|
1307
|
+
|
1308
|
+
</li>
|
1309
|
+
|
1310
|
+
<li>
|
1311
|
+
|
1312
|
+
<span class='name'>class_base</span>
|
1313
|
+
|
1314
|
+
|
1315
|
+
<span class='type'>(<tt>Class</tt>)</span>
|
1316
|
+
|
1317
|
+
|
1318
|
+
|
1319
|
+
—
|
1320
|
+
<div class='inline'>
|
1321
|
+
<p>class to define the method in.</p>
|
1322
|
+
</div>
|
1323
|
+
|
1324
|
+
</li>
|
1325
|
+
|
1326
|
+
</ul>
|
1327
|
+
|
1328
|
+
<p class="tag_title">Returns:</p>
|
1329
|
+
<ul class="return">
|
1330
|
+
|
1331
|
+
<li>
|
1332
|
+
|
1333
|
+
|
1334
|
+
<span class='type'>(<tt><span class='object_link'><a href="Porolog/Predicate.html" title="Porolog::Predicate (class)">Porolog::Predicate</a></span></tt>)</span>
|
1335
|
+
|
1336
|
+
|
1337
|
+
|
1338
|
+
—
|
1339
|
+
<div class='inline'>
|
1340
|
+
<p>Predicate created if only one name is provided</p>
|
1341
|
+
</div>
|
1342
|
+
|
1343
|
+
</li>
|
1344
|
+
|
1345
|
+
<li>
|
1346
|
+
|
1347
|
+
|
1348
|
+
<span class='type'>(<tt><span class='object_link'><a href="Array.html" title="Array (class)">Array</a></span><<span class='object_link'><a href="Porolog/Predicate.html" title="Porolog::Predicate (class)">Porolog::Predicate</a></span>></tt>)</span>
|
1349
|
+
|
1350
|
+
|
1351
|
+
|
1352
|
+
—
|
1353
|
+
<div class='inline'>
|
1354
|
+
<p>Predicates created if multiple names are provided</p>
|
1355
|
+
</div>
|
1356
|
+
|
1357
|
+
</li>
|
1358
|
+
|
1359
|
+
</ul>
|
1360
|
+
|
1361
|
+
</div><table class="source_code">
|
1362
|
+
<tr>
|
1363
|
+
<td>
|
1364
|
+
<pre class="lines">
|
1365
|
+
|
1366
|
+
|
1367
|
+
55
|
1368
|
+
56
|
1369
|
+
57
|
1370
|
+
58
|
1371
|
+
59
|
1372
|
+
60
|
1373
|
+
61
|
1374
|
+
62
|
1375
|
+
63
|
1376
|
+
64
|
1377
|
+
65
|
1378
|
+
66
|
1379
|
+
67
|
1380
|
+
68
|
1381
|
+
69
|
1382
|
+
70
|
1383
|
+
71
|
1384
|
+
72
|
1385
|
+
73
|
1386
|
+
74
|
1387
|
+
75
|
1388
|
+
76
|
1389
|
+
77</pre>
|
1390
|
+
</td>
|
1391
|
+
<td>
|
1392
|
+
<pre class="code"><span class="info file"># File 'lib/porolog.rb', line 55</span>
|
1393
|
+
|
1394
|
+
<span class='kw'>def</span> <span class='id identifier rubyid_predicate'>predicate</span><span class='lparen'>(</span><span class='op'>*</span><span class='id identifier rubyid_names'>names</span><span class='comma'>,</span> <span class='label'>class_base:</span> <span class='const'><span class='object_link'><a href="Object.html" title="Object (class)">Object</a></span></span><span class='rparen'>)</span>
|
1395
|
+
<span class='id identifier rubyid_names'>names</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='id identifier rubyid_names'>names</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_flatten'>flatten</span>
|
1396
|
+
|
1397
|
+
<span class='id identifier rubyid_predicates'>predicates</span> <span class='op'>=</span> <span class='id identifier rubyid_names'>names</span><span class='period'>.</span><span class='id identifier rubyid_map'>map</span><span class='lbrace'>{</span><span class='op'>|</span><span class='id identifier rubyid_name'>name</span><span class='op'>|</span>
|
1398
|
+
<span class='id identifier rubyid_method'>method</span> <span class='op'>=</span> <span class='id identifier rubyid_name'>name</span><span class='period'>.</span><span class='id identifier rubyid_to_sym'>to_sym</span>
|
1399
|
+
<span class='id identifier rubyid_predicate'>predicate</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="Porolog/Predicate.html" title="Porolog::Predicate (class)">Predicate</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="Porolog/Predicate.html#new-class_method" title="Porolog::Predicate.new (method)">new</a></span></span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='rparen'>)</span>
|
1400
|
+
<span class='id identifier rubyid_class_base'>class_base</span><span class='period'>.</span><span class='id identifier rubyid_class_eval'>class_eval</span><span class='lbrace'>{</span>
|
1401
|
+
<span class='id identifier rubyid_remove_method'>remove_method</span><span class='lparen'>(</span><span class='id identifier rubyid_method'>method</span><span class='rparen'>)</span> <span class='kw'>if</span> <span class='id identifier rubyid_public_method_defined?'>public_method_defined?</span><span class='lparen'>(</span><span class='id identifier rubyid_method'>method</span><span class='rparen'>)</span>
|
1402
|
+
<span class='id identifier rubyid_define_method'>define_method</span><span class='lparen'>(</span><span class='id identifier rubyid_method'>method</span><span class='rparen'>)</span><span class='lbrace'>{</span><span class='op'>|</span><span class='op'>*</span><span class='id identifier rubyid_args'>args</span><span class='op'>|</span>
|
1403
|
+
<span class='id identifier rubyid_predicate'>predicate</span><span class='period'>.</span><span class='lparen'>(</span><span class='op'>*</span><span class='id identifier rubyid_args'>args</span><span class='rparen'>)</span>
|
1404
|
+
<span class='rbrace'>}</span>
|
1405
|
+
<span class='rbrace'>}</span>
|
1406
|
+
<span class='lparen'>(</span><span class='kw'>class</span> <span class='op'><<</span> <span class='id identifier rubyid_class_base'>class_base</span><span class='semicolon'>;</span> <span class='kw'>self</span><span class='semicolon'>;</span> <span class='kw'>end</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_instance_eval'>instance_eval</span> <span class='lbrace'>{</span>
|
1407
|
+
<span class='id identifier rubyid_remove_method'>remove_method</span><span class='lparen'>(</span><span class='id identifier rubyid_method'>method</span><span class='rparen'>)</span> <span class='kw'>if</span> <span class='id identifier rubyid_public_method_defined?'>public_method_defined?</span><span class='lparen'>(</span><span class='id identifier rubyid_method'>method</span><span class='rparen'>)</span>
|
1408
|
+
<span class='id identifier rubyid_define_method'>define_method</span><span class='lparen'>(</span><span class='id identifier rubyid_method'>method</span><span class='rparen'>)</span><span class='lbrace'>{</span><span class='op'>|</span><span class='op'>*</span><span class='id identifier rubyid_args'>args</span><span class='op'>|</span>
|
1409
|
+
<span class='id identifier rubyid_predicate'>predicate</span><span class='period'>.</span><span class='lparen'>(</span><span class='op'>*</span><span class='id identifier rubyid_args'>args</span><span class='rparen'>)</span>
|
1410
|
+
<span class='rbrace'>}</span>
|
1411
|
+
<span class='rbrace'>}</span> <span class='kw'>unless</span> <span class='id identifier rubyid_class_base'>class_base</span> <span class='op'>==</span> <span class='const'><span class='object_link'><a href="Object.html" title="Object (class)">Object</a></span></span>
|
1412
|
+
<span class='id identifier rubyid_predicate'>predicate</span>
|
1413
|
+
<span class='rbrace'>}</span>
|
1414
|
+
|
1415
|
+
<span class='id identifier rubyid_predicates'>predicates</span><span class='period'>.</span><span class='id identifier rubyid_size'>size</span> <span class='op'>></span> <span class='int'>1</span> <span class='op'>&&</span> <span class='id identifier rubyid_predicates'>predicates</span> <span class='op'>||</span> <span class='id identifier rubyid_predicates'>predicates</span><span class='period'>.</span><span class='id identifier rubyid_first'>first</span>
|
1416
|
+
<span class='kw'>end</span></pre>
|
1417
|
+
</td>
|
1418
|
+
</tr>
|
1419
|
+
</table>
|
1420
|
+
</div>
|
1421
|
+
|
1422
|
+
<div class="method_details ">
|
1423
|
+
<h3 class="signature " id="unify-instance_method">
|
1424
|
+
|
1425
|
+
#<strong>unify</strong>(left, right, left_goal, right_goal = left_goal, visited = []) ⇒ <tt><span class='object_link'><a href="Array.html" title="Array (class)">Array</a></span></tt><sup>?</sup>
|
1426
|
+
|
1427
|
+
|
1428
|
+
|
1429
|
+
|
1430
|
+
|
1431
|
+
</h3><div class="docstring">
|
1432
|
+
<div class="discussion">
|
1433
|
+
|
1434
|
+
<p>Attempt to unify two entities of two goals.</p>
|
1435
|
+
|
1436
|
+
|
1437
|
+
</div>
|
1438
|
+
</div>
|
1439
|
+
<div class="tags">
|
1440
|
+
<p class="tag_title">Parameters:</p>
|
1441
|
+
<ul class="param">
|
1442
|
+
|
1443
|
+
<li>
|
1444
|
+
|
1445
|
+
<span class='name'>left</span>
|
1446
|
+
|
1447
|
+
|
1448
|
+
<span class='type'>(<tt><span class='object_link'><a href="Object.html" title="Object (class)">Object</a></span></tt>)</span>
|
1449
|
+
|
1450
|
+
|
1451
|
+
|
1452
|
+
—
|
1453
|
+
<div class='inline'>
|
1454
|
+
<p>left hand side entity.</p>
|
1455
|
+
</div>
|
1456
|
+
|
1457
|
+
</li>
|
1458
|
+
|
1459
|
+
<li>
|
1460
|
+
|
1461
|
+
<span class='name'>right</span>
|
1462
|
+
|
1463
|
+
|
1464
|
+
<span class='type'>(<tt><span class='object_link'><a href="Object.html" title="Object (class)">Object</a></span></tt>)</span>
|
1465
|
+
|
1466
|
+
|
1467
|
+
|
1468
|
+
—
|
1469
|
+
<div class='inline'>
|
1470
|
+
<p>right hand side entity.</p>
|
1471
|
+
</div>
|
1472
|
+
|
1473
|
+
</li>
|
1474
|
+
|
1475
|
+
<li>
|
1476
|
+
|
1477
|
+
<span class='name'>left_goal</span>
|
1478
|
+
|
1479
|
+
|
1480
|
+
<span class='type'>(<tt><span class='object_link'><a href="Porolog/Goal.html" title="Porolog::Goal (class)">Porolog::Goal</a></span></tt>)</span>
|
1481
|
+
|
1482
|
+
|
1483
|
+
|
1484
|
+
—
|
1485
|
+
<div class='inline'>
|
1486
|
+
<p>goal of left hand side entity.</p>
|
1487
|
+
</div>
|
1488
|
+
|
1489
|
+
</li>
|
1490
|
+
|
1491
|
+
<li>
|
1492
|
+
|
1493
|
+
<span class='name'>right_goal</span>
|
1494
|
+
|
1495
|
+
|
1496
|
+
<span class='type'>(<tt><span class='object_link'><a href="Porolog/Goal.html" title="Porolog::Goal (class)">Porolog::Goal</a></span></tt>)</span>
|
1497
|
+
|
1498
|
+
|
1499
|
+
<em class="default">(defaults to: <tt>left_goal</tt>)</em>
|
1500
|
+
|
1501
|
+
|
1502
|
+
—
|
1503
|
+
<div class='inline'>
|
1504
|
+
<p>goal of right hand side entity.</p>
|
1505
|
+
</div>
|
1506
|
+
|
1507
|
+
</li>
|
1508
|
+
|
1509
|
+
<li>
|
1510
|
+
|
1511
|
+
<span class='name'>visited</span>
|
1512
|
+
|
1513
|
+
|
1514
|
+
<span class='type'>(<tt><span class='object_link'><a href="Array.html" title="Array (class)">Array</a></span></tt>)</span>
|
1515
|
+
|
1516
|
+
|
1517
|
+
<em class="default">(defaults to: <tt>[]</tt>)</em>
|
1518
|
+
|
1519
|
+
|
1520
|
+
—
|
1521
|
+
<div class='inline'>
|
1522
|
+
<p>prevents infinite recursion.</p>
|
1523
|
+
</div>
|
1524
|
+
|
1525
|
+
</li>
|
1526
|
+
|
1527
|
+
</ul>
|
1528
|
+
|
1529
|
+
<p class="tag_title">Returns:</p>
|
1530
|
+
<ul class="return">
|
1531
|
+
|
1532
|
+
<li>
|
1533
|
+
|
1534
|
+
|
1535
|
+
<span class='type'>(<tt><span class='object_link'><a href="Array.html" title="Array (class)">Array</a></span></tt>)</span>
|
1536
|
+
|
1537
|
+
|
1538
|
+
|
1539
|
+
—
|
1540
|
+
<div class='inline'>
|
1541
|
+
<p>an Array of unifications when the left hand side can be unified with the right hand.</p>
|
1542
|
+
</div>
|
1543
|
+
|
1544
|
+
</li>
|
1545
|
+
|
1546
|
+
<li>
|
1547
|
+
|
1548
|
+
|
1549
|
+
<span class='type'>(<tt>nil</tt>)</span>
|
1550
|
+
|
1551
|
+
|
1552
|
+
|
1553
|
+
—
|
1554
|
+
<div class='inline'>
|
1555
|
+
<p>nil if they cannot be unified.</p>
|
1556
|
+
</div>
|
1557
|
+
|
1558
|
+
</li>
|
1559
|
+
|
1560
|
+
</ul>
|
1561
|
+
|
1562
|
+
</div><table class="source_code">
|
1563
|
+
<tr>
|
1564
|
+
<td>
|
1565
|
+
<pre class="lines">
|
1566
|
+
|
1567
|
+
|
1568
|
+
238
|
1569
|
+
239
|
1570
|
+
240
|
1571
|
+
241
|
1572
|
+
242
|
1573
|
+
243
|
1574
|
+
244
|
1575
|
+
245
|
1576
|
+
246
|
1577
|
+
247
|
1578
|
+
248
|
1579
|
+
249
|
1580
|
+
250
|
1581
|
+
251
|
1582
|
+
252
|
1583
|
+
253
|
1584
|
+
254
|
1585
|
+
255
|
1586
|
+
256
|
1587
|
+
257
|
1588
|
+
258
|
1589
|
+
259
|
1590
|
+
260
|
1591
|
+
261
|
1592
|
+
262
|
1593
|
+
263
|
1594
|
+
264
|
1595
|
+
265
|
1596
|
+
266
|
1597
|
+
267
|
1598
|
+
268
|
1599
|
+
269
|
1600
|
+
270
|
1601
|
+
271
|
1602
|
+
272
|
1603
|
+
273
|
1604
|
+
274
|
1605
|
+
275
|
1606
|
+
276
|
1607
|
+
277
|
1608
|
+
278
|
1609
|
+
279
|
1610
|
+
280
|
1611
|
+
281
|
1612
|
+
282
|
1613
|
+
283
|
1614
|
+
284
|
1615
|
+
285
|
1616
|
+
286
|
1617
|
+
287
|
1618
|
+
288
|
1619
|
+
289
|
1620
|
+
290
|
1621
|
+
291
|
1622
|
+
292
|
1623
|
+
293
|
1624
|
+
294
|
1625
|
+
295
|
1626
|
+
296
|
1627
|
+
297
|
1628
|
+
298
|
1629
|
+
299
|
1630
|
+
300
|
1631
|
+
301
|
1632
|
+
302
|
1633
|
+
303
|
1634
|
+
304
|
1635
|
+
305
|
1636
|
+
306
|
1637
|
+
307
|
1638
|
+
308
|
1639
|
+
309
|
1640
|
+
310
|
1641
|
+
311
|
1642
|
+
312
|
1643
|
+
313
|
1644
|
+
314
|
1645
|
+
315
|
1646
|
+
316
|
1647
|
+
317
|
1648
|
+
318
|
1649
|
+
319
|
1650
|
+
320
|
1651
|
+
321
|
1652
|
+
322
|
1653
|
+
323
|
1654
|
+
324
|
1655
|
+
325
|
1656
|
+
326
|
1657
|
+
327
|
1658
|
+
328
|
1659
|
+
329
|
1660
|
+
330
|
1661
|
+
331
|
1662
|
+
332
|
1663
|
+
333
|
1664
|
+
334
|
1665
|
+
335
|
1666
|
+
336
|
1667
|
+
337
|
1668
|
+
338
|
1669
|
+
339
|
1670
|
+
340
|
1671
|
+
341
|
1672
|
+
342
|
1673
|
+
343
|
1674
|
+
344
|
1675
|
+
345
|
1676
|
+
346
|
1677
|
+
347
|
1678
|
+
348
|
1679
|
+
349
|
1680
|
+
350
|
1681
|
+
351
|
1682
|
+
352
|
1683
|
+
353
|
1684
|
+
354
|
1685
|
+
355
|
1686
|
+
356
|
1687
|
+
357
|
1688
|
+
358
|
1689
|
+
359
|
1690
|
+
360
|
1691
|
+
361
|
1692
|
+
362
|
1693
|
+
363
|
1694
|
+
364
|
1695
|
+
365
|
1696
|
+
366
|
1697
|
+
367
|
1698
|
+
368
|
1699
|
+
369
|
1700
|
+
370
|
1701
|
+
371
|
1702
|
+
372
|
1703
|
+
373
|
1704
|
+
374</pre>
|
1705
|
+
</td>
|
1706
|
+
<td>
|
1707
|
+
<pre class="code"><span class="info file"># File 'lib/porolog.rb', line 238</span>
|
1708
|
+
|
1709
|
+
<span class='kw'>def</span> <span class='id identifier rubyid_unify'>unify</span><span class='lparen'>(</span><span class='id identifier rubyid_left'>left</span><span class='comma'>,</span> <span class='id identifier rubyid_right'>right</span><span class='comma'>,</span> <span class='id identifier rubyid_left_goal'>left_goal</span><span class='comma'>,</span> <span class='id identifier rubyid_right_goal'>right_goal</span> <span class='op'>=</span> <span class='id identifier rubyid_left_goal'>left_goal</span><span class='comma'>,</span> <span class='id identifier rubyid_visited'>visited</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='rbracket'>]</span><span class='rparen'>)</span>
|
1710
|
+
<span class='id identifier rubyid_right_goal'>right_goal</span> <span class='op'>||=</span> <span class='id identifier rubyid_left_goal'>left_goal</span>
|
1711
|
+
<span class='id identifier rubyid_goals'>goals</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='id identifier rubyid_left_goal'>left_goal</span><span class='comma'>,</span> <span class='id identifier rubyid_right_goal'>right_goal</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_uniq'>uniq</span>
|
1712
|
+
<span class='id identifier rubyid_signature'>signature</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='id identifier rubyid_left'>left</span><span class='period'>.</span><span class='id identifier rubyid_type'>type</span><span class='comma'>,</span> <span class='id identifier rubyid_right'>right</span><span class='period'>.</span><span class='id identifier rubyid_type'>type</span><span class='rbracket'>]</span>
|
1713
|
+
|
1714
|
+
<span class='comment'># -- Nil is Uninstantiated (can always unify) --
|
1715
|
+
</span> <span class='kw'>return</span> <span class='lbracket'>[</span><span class='rbracket'>]</span> <span class='kw'>unless</span> <span class='id identifier rubyid_left'>left</span> <span class='op'>&&</span> <span class='id identifier rubyid_right'>right</span>
|
1716
|
+
|
1717
|
+
<span class='comment'># -- Set HeadTail Goals --
|
1718
|
+
</span> <span class='kw'>case</span> <span class='id identifier rubyid_signature'>signature</span>
|
1719
|
+
<span class='kw'>when</span> <span class='lbracket'>[</span><span class='symbol'>:atomic</span><span class='comma'>,</span> <span class='symbol'>:atomic</span><span class='rbracket'>]</span>
|
1720
|
+
<span class='kw'>if</span> <span class='id identifier rubyid_left'>left</span> <span class='op'>==</span> <span class='id identifier rubyid_right'>right</span>
|
1721
|
+
<span class='lbracket'>[</span><span class='rbracket'>]</span>
|
1722
|
+
<span class='kw'>else</span>
|
1723
|
+
<span class='id identifier rubyid_msg'>msg</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>Cannot unify because </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_left'>left</span><span class='period'>.</span><span class='id identifier rubyid_inspect'>inspect</span><span class='embexpr_end'>}</span><span class='tstring_content'> != </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_right'>right</span><span class='period'>.</span><span class='id identifier rubyid_inspect'>inspect</span><span class='embexpr_end'>}</span><span class='tstring_content'> (atomic != atomic)</span><span class='tstring_end'>"</span></span>
|
1724
|
+
<span class='id identifier rubyid_goals'>goals</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span><span class='lbrace'>{</span><span class='op'>|</span><span class='id identifier rubyid_goal'>goal</span><span class='op'>|</span> <span class='id identifier rubyid_goal'>goal</span><span class='period'>.</span><span class='id identifier rubyid_log'>log</span> <span class='op'><<</span> <span class='id identifier rubyid_msg'>msg</span> <span class='rbrace'>}</span>
|
1725
|
+
<span class='kw'>nil</span>
|
1726
|
+
<span class='kw'>end</span>
|
1727
|
+
|
1728
|
+
<span class='kw'>when</span> <span class='lbracket'>[</span><span class='symbol'>:array</span><span class='comma'>,</span> <span class='symbol'>:array</span><span class='rbracket'>]</span><span class='comma'>,</span> <span class='lbracket'>[</span><span class='symbol'>:tail</span><span class='comma'>,</span> <span class='symbol'>:tail</span><span class='rbracket'>]</span>
|
1729
|
+
<span class='id identifier rubyid__merged'>_merged</span><span class='comma'>,</span> <span class='id identifier rubyid_unifications'>unifications</span> <span class='op'>=</span> <span class='id identifier rubyid_unify_arrays'>unify_arrays</span><span class='lparen'>(</span><span class='id identifier rubyid_left'>left</span><span class='comma'>,</span> <span class='id identifier rubyid_right'>right</span><span class='comma'>,</span> <span class='id identifier rubyid_left_goal'>left_goal</span><span class='comma'>,</span> <span class='id identifier rubyid_right_goal'>right_goal</span><span class='comma'>,</span> <span class='id identifier rubyid_visited'>visited</span><span class='rparen'>)</span>
|
1730
|
+
<span class='kw'>if</span> <span class='id identifier rubyid_unifications'>unifications</span>
|
1312
1731
|
<span class='id identifier rubyid_unifications'>unifications</span>
|
1313
1732
|
<span class='kw'>else</span>
|
1314
1733
|
<span class='id identifier rubyid_msg'>msg</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>Cannot unify because </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_left'>left</span><span class='period'>.</span><span class='id identifier rubyid_inspect'>inspect</span><span class='embexpr_end'>}</span><span class='tstring_content'> != </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_right'>right</span><span class='period'>.</span><span class='id identifier rubyid_inspect'>inspect</span><span class='embexpr_end'>}</span><span class='tstring_content'> (array != array)</span><span class='tstring_end'>"</span></span>
|
@@ -1316,6 +1735,26 @@
|
|
1316
1735
|
<span class='kw'>nil</span>
|
1317
1736
|
<span class='kw'>end</span>
|
1318
1737
|
|
1738
|
+
<span class='kw'>when</span> <span class='lbracket'>[</span><span class='symbol'>:array</span><span class='comma'>,</span> <span class='symbol'>:tail</span><span class='rbracket'>]</span>
|
1739
|
+
<span class='id identifier rubyid__merged'>_merged</span><span class='comma'>,</span> <span class='id identifier rubyid_unifications'>unifications</span> <span class='op'>=</span> <span class='id identifier rubyid_unify_arrays'>unify_arrays</span><span class='lparen'>(</span><span class='lbracket'>[</span><span class='id identifier rubyid_left'>left</span><span class='rbracket'>]</span><span class='comma'>,</span> <span class='id identifier rubyid_right'>right</span><span class='period'>.</span><span class='id identifier rubyid_value'>value</span><span class='comma'>,</span> <span class='id identifier rubyid_left_goal'>left_goal</span><span class='comma'>,</span> <span class='id identifier rubyid_right_goal'>right_goal</span><span class='comma'>,</span> <span class='id identifier rubyid_visited'>visited</span><span class='rparen'>)</span>
|
1740
|
+
<span class='kw'>if</span> <span class='id identifier rubyid_unifications'>unifications</span>
|
1741
|
+
<span class='id identifier rubyid_unifications'>unifications</span>
|
1742
|
+
<span class='kw'>else</span>
|
1743
|
+
<span class='id identifier rubyid_msg'>msg</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>Cannot unify because </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_left'>left</span><span class='period'>.</span><span class='id identifier rubyid_inspect'>inspect</span><span class='embexpr_end'>}</span><span class='tstring_content'> != </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_right'>right</span><span class='period'>.</span><span class='id identifier rubyid_inspect'>inspect</span><span class='embexpr_end'>}</span><span class='tstring_content'> (array != tail)</span><span class='tstring_end'>"</span></span>
|
1744
|
+
<span class='id identifier rubyid_goals'>goals</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span><span class='lbrace'>{</span><span class='op'>|</span><span class='id identifier rubyid_goal'>goal</span><span class='op'>|</span> <span class='id identifier rubyid_goal'>goal</span><span class='period'>.</span><span class='id identifier rubyid_log'>log</span> <span class='op'><<</span> <span class='id identifier rubyid_msg'>msg</span> <span class='rbrace'>}</span>
|
1745
|
+
<span class='kw'>nil</span>
|
1746
|
+
<span class='kw'>end</span>
|
1747
|
+
|
1748
|
+
<span class='kw'>when</span> <span class='lbracket'>[</span><span class='symbol'>:tail</span><span class='comma'>,</span> <span class='symbol'>:array</span><span class='rbracket'>]</span>
|
1749
|
+
<span class='id identifier rubyid__merged'>_merged</span><span class='comma'>,</span> <span class='id identifier rubyid_unifications'>unifications</span> <span class='op'>=</span> <span class='id identifier rubyid_unify_arrays'>unify_arrays</span><span class='lparen'>(</span><span class='id identifier rubyid_left'>left</span><span class='period'>.</span><span class='id identifier rubyid_value'>value</span><span class='comma'>,</span> <span class='lbracket'>[</span><span class='id identifier rubyid_right'>right</span><span class='rbracket'>]</span><span class='comma'>,</span> <span class='id identifier rubyid_left_goal'>left_goal</span><span class='comma'>,</span> <span class='id identifier rubyid_right_goal'>right_goal</span><span class='comma'>,</span> <span class='id identifier rubyid_visited'>visited</span><span class='rparen'>)</span>
|
1750
|
+
<span class='kw'>if</span> <span class='id identifier rubyid_unifications'>unifications</span>
|
1751
|
+
<span class='id identifier rubyid_unifications'>unifications</span>
|
1752
|
+
<span class='kw'>else</span>
|
1753
|
+
<span class='id identifier rubyid_msg'>msg</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>Cannot unify because </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_left'>left</span><span class='period'>.</span><span class='id identifier rubyid_inspect'>inspect</span><span class='embexpr_end'>}</span><span class='tstring_content'> != </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_right'>right</span><span class='period'>.</span><span class='id identifier rubyid_inspect'>inspect</span><span class='embexpr_end'>}</span><span class='tstring_content'> (tail != array)</span><span class='tstring_end'>"</span></span>
|
1754
|
+
<span class='id identifier rubyid_goals'>goals</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span><span class='lbrace'>{</span><span class='op'>|</span><span class='id identifier rubyid_goal'>goal</span><span class='op'>|</span> <span class='id identifier rubyid_goal'>goal</span><span class='period'>.</span><span class='id identifier rubyid_log'>log</span> <span class='op'><<</span> <span class='id identifier rubyid_msg'>msg</span> <span class='rbrace'>}</span>
|
1755
|
+
<span class='kw'>nil</span>
|
1756
|
+
<span class='kw'>end</span>
|
1757
|
+
|
1319
1758
|
<span class='kw'>when</span> <span class='lbracket'>[</span><span class='symbol'>:variable</span><span class='comma'>,</span> <span class='symbol'>:atomic</span><span class='rbracket'>]</span>
|
1320
1759
|
<span class='id identifier rubyid_left_value'>left_value</span> <span class='op'>=</span> <span class='id identifier rubyid_left_goal'>left_goal</span><span class='period'>.</span><span class='id identifier rubyid_value_of'>value_of</span><span class='lparen'>(</span><span class='id identifier rubyid_left'>left</span><span class='comma'>,</span> <span class='kw'>nil</span><span class='comma'>,</span> <span class='id identifier rubyid_visited'>visited</span><span class='rparen'>)</span>
|
1321
1760
|
<span class='id identifier rubyid_right_value'>right_value</span> <span class='op'>=</span> <span class='id identifier rubyid_right'>right</span>
|
@@ -1339,17 +1778,21 @@
|
|
1339
1778
|
<span class='kw'>end</span>
|
1340
1779
|
|
1341
1780
|
<span class='kw'>when</span> <span class='lbracket'>[</span><span class='symbol'>:variable</span><span class='comma'>,</span> <span class='symbol'>:variable</span><span class='rbracket'>]</span>
|
1342
|
-
<span class='id identifier rubyid_left_value'>left_value</span> <span class='op'>=</span> <span class='id identifier rubyid_left_goal'>left_goal</span><span class='period'>.</span><span class='id identifier rubyid_value_of'>value_of</span><span class='lparen'>(</span><span class='id identifier rubyid_left'>left</span><span class='comma'>,</span> <span class='kw'>nil</span><span class='comma'>,</span> <span class='id identifier rubyid_visited'>visited</span><span class='rparen'>)</span>
|
1343
|
-
<span class='id identifier rubyid_right_value'>right_value</span> <span class='op'>=</span> <span class='id identifier rubyid_right_goal'>right_goal</span><span class='period'>.</span><span class='id identifier rubyid_value_of'>value_of</span><span class='lparen'>(</span><span class='id identifier rubyid_right'>right</span><span class='comma'>,</span> <span class='kw'>nil</span><span class='comma'>,</span> <span class='id identifier rubyid_visited'>visited</span><span class='rparen'>)</span>
|
1781
|
+
<span class='id identifier rubyid_left_value'>left_value</span> <span class='op'>=</span> <span class='id identifier rubyid_left_goal'>left_goal</span><span class='period'>.</span><span class='id identifier rubyid_value_of'>value_of</span><span class='lparen'>(</span><span class='id identifier rubyid_left'>left</span><span class='comma'>,</span> <span class='kw'>nil</span><span class='comma'>,</span> <span class='id identifier rubyid_visited'>visited</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_value'>value</span>
|
1782
|
+
<span class='id identifier rubyid_right_value'>right_value</span> <span class='op'>=</span> <span class='id identifier rubyid_right_goal'>right_goal</span><span class='period'>.</span><span class='id identifier rubyid_value_of'>value_of</span><span class='lparen'>(</span><span class='id identifier rubyid_right'>right</span><span class='comma'>,</span> <span class='kw'>nil</span><span class='comma'>,</span> <span class='id identifier rubyid_visited'>visited</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_value'>value</span>
|
1344
1783
|
<span class='kw'>if</span> <span class='id identifier rubyid_left_value'>left_value</span> <span class='op'>==</span> <span class='id identifier rubyid_right_value'>right_value</span> <span class='op'>||</span> <span class='id identifier rubyid_left_value'>left_value</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'><span class='object_link'><a href="Porolog/Variable.html" title="Porolog::Variable (class)">Variable</a></span></span><span class='rparen'>)</span> <span class='op'>||</span> <span class='id identifier rubyid_right_value'>right_value</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'><span class='object_link'><a href="Porolog/Variable.html" title="Porolog::Variable (class)">Variable</a></span></span><span class='rparen'>)</span> <span class='op'>||</span> <span class='id identifier rubyid_left_value'>left_value</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span> <span class='op'>||</span> <span class='id identifier rubyid_right_value'>right_value</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span>
|
1345
1784
|
<span class='lbracket'>[</span><span class='lbracket'>[</span><span class='id identifier rubyid_left'>left</span><span class='comma'>,</span> <span class='id identifier rubyid_right'>right</span><span class='comma'>,</span> <span class='id identifier rubyid_left_goal'>left_goal</span><span class='comma'>,</span> <span class='id identifier rubyid_right_goal'>right_goal</span><span class='rbracket'>]</span><span class='rbracket'>]</span>
|
1785
|
+
<span class='kw'>elsif</span> <span class='id identifier rubyid_left_value'>left_value</span> <span class='op'>==</span> <span class='const'><span class='object_link'><a href="#UNKNOWN_ARRAY-constant" title="Porolog::UNKNOWN_ARRAY (constant)">UNKNOWN_ARRAY</a></span></span> <span class='op'>&&</span> <span class='lparen'>(</span><span class='id identifier rubyid_right_value'>right_value</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'><span class='object_link'><a href="Porolog/Variable.html" title="Porolog::Variable (class)">Variable</a></span></span><span class='rparen'>)</span> <span class='op'>||</span> <span class='id identifier rubyid_right_value'>right_value</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span> <span class='op'>||</span> <span class='id identifier rubyid_right_value'>right_value</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'><span class='object_link'><a href="Array.html" title="Array (class)">Array</a></span></span><span class='rparen'>)</span><span class='rparen'>)</span>
|
1786
|
+
<span class='lbracket'>[</span><span class='lbracket'>[</span><span class='id identifier rubyid_left'>left</span><span class='comma'>,</span> <span class='id identifier rubyid_right'>right</span><span class='comma'>,</span> <span class='id identifier rubyid_left_goal'>left_goal</span><span class='comma'>,</span> <span class='id identifier rubyid_right_goal'>right_goal</span><span class='rbracket'>]</span><span class='rbracket'>]</span>
|
1787
|
+
<span class='kw'>elsif</span> <span class='id identifier rubyid_right_value'>right_value</span> <span class='op'>==</span> <span class='const'><span class='object_link'><a href="#UNKNOWN_ARRAY-constant" title="Porolog::UNKNOWN_ARRAY (constant)">UNKNOWN_ARRAY</a></span></span> <span class='op'>&&</span> <span class='lparen'>(</span><span class='id identifier rubyid_left_value'>left_value</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'><span class='object_link'><a href="Porolog/Variable.html" title="Porolog::Variable (class)">Variable</a></span></span><span class='rparen'>)</span> <span class='op'>||</span> <span class='id identifier rubyid_left_value'>left_value</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span> <span class='op'>||</span> <span class='id identifier rubyid_left_value'>left_value</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'><span class='object_link'><a href="Array.html" title="Array (class)">Array</a></span></span><span class='rparen'>)</span><span class='rparen'>)</span>
|
1788
|
+
<span class='lbracket'>[</span><span class='lbracket'>[</span><span class='id identifier rubyid_left'>left</span><span class='comma'>,</span> <span class='id identifier rubyid_right'>right</span><span class='comma'>,</span> <span class='id identifier rubyid_left_goal'>left_goal</span><span class='comma'>,</span> <span class='id identifier rubyid_right_goal'>right_goal</span><span class='rbracket'>]</span><span class='rbracket'>]</span>
|
1346
1789
|
<span class='kw'>else</span>
|
1347
1790
|
<span class='id identifier rubyid_msg'>msg</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>Cannot unify because </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_left_value'>left_value</span><span class='period'>.</span><span class='id identifier rubyid_inspect'>inspect</span><span class='embexpr_end'>}</span><span class='tstring_content'> != </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_right_value'>right_value</span><span class='period'>.</span><span class='id identifier rubyid_inspect'>inspect</span><span class='embexpr_end'>}</span><span class='tstring_content'> (variable != variable)</span><span class='tstring_end'>"</span></span>
|
1348
1791
|
<span class='id identifier rubyid_goals'>goals</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span><span class='lbrace'>{</span><span class='op'>|</span><span class='id identifier rubyid_goal'>goal</span><span class='op'>|</span> <span class='id identifier rubyid_goal'>goal</span><span class='period'>.</span><span class='id identifier rubyid_log'>log</span> <span class='op'><<</span> <span class='id identifier rubyid_msg'>msg</span> <span class='rbrace'>}</span>
|
1349
1792
|
<span class='kw'>nil</span>
|
1350
1793
|
<span class='kw'>end</span>
|
1351
1794
|
|
1352
|
-
<span class='kw'>when</span> <span class='lbracket'>[</span><span class='symbol'>:variable</span><span class='comma'>,</span> <span class='symbol'>:array</span><span class='rbracket'>]</span>
|
1795
|
+
<span class='kw'>when</span> <span class='lbracket'>[</span><span class='symbol'>:variable</span><span class='comma'>,</span> <span class='symbol'>:array</span><span class='rbracket'>]</span><span class='comma'>,</span> <span class='lbracket'>[</span><span class='symbol'>:variable</span><span class='comma'>,</span> <span class='symbol'>:tail</span><span class='rbracket'>]</span>
|
1353
1796
|
<span class='id identifier rubyid_left_value'>left_value</span> <span class='op'>=</span> <span class='id identifier rubyid_left_goal'>left_goal</span><span class='period'>.</span><span class='id identifier rubyid_value_of'>value_of</span><span class='lparen'>(</span><span class='id identifier rubyid_left'>left</span><span class='comma'>,</span> <span class='kw'>nil</span><span class='comma'>,</span> <span class='id identifier rubyid_visited'>visited</span><span class='rparen'>)</span>
|
1354
1797
|
<span class='id identifier rubyid_right_value'>right_value</span> <span class='op'>=</span> <span class='id identifier rubyid_right'>right</span>
|
1355
1798
|
<span class='kw'>if</span> <span class='id identifier rubyid_left_value'>left_value</span> <span class='op'>==</span> <span class='id identifier rubyid_right_value'>right_value</span> <span class='op'>||</span> <span class='id identifier rubyid_left_value'>left_value</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'><span class='object_link'><a href="Porolog/Variable.html" title="Porolog::Variable (class)">Variable</a></span></span><span class='rparen'>)</span> <span class='op'>||</span> <span class='id identifier rubyid_left_value'>left_value</span> <span class='op'>==</span> <span class='const'><span class='object_link'><a href="#UNKNOWN_ARRAY-constant" title="Porolog::UNKNOWN_ARRAY (constant)">UNKNOWN_ARRAY</a></span></span> <span class='op'>||</span> <span class='id identifier rubyid_left_value'>left_value</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span>
|
@@ -1369,7 +1812,7 @@
|
|
1369
1812
|
<span class='kw'>nil</span>
|
1370
1813
|
<span class='kw'>end</span>
|
1371
1814
|
|
1372
|
-
<span class='kw'>when</span> <span class='lbracket'>[</span><span class='symbol'>:array</span><span class='comma'>,</span> <span class='symbol'>:variable</span><span class='rbracket'>]</span>
|
1815
|
+
<span class='kw'>when</span> <span class='lbracket'>[</span><span class='symbol'>:array</span><span class='comma'>,</span> <span class='symbol'>:variable</span><span class='rbracket'>]</span><span class='comma'>,</span> <span class='lbracket'>[</span><span class='symbol'>:tail</span><span class='comma'>,</span> <span class='symbol'>:variable</span><span class='rbracket'>]</span>
|
1373
1816
|
<span class='id identifier rubyid_left_value'>left_value</span> <span class='op'>=</span> <span class='id identifier rubyid_left'>left</span>
|
1374
1817
|
<span class='id identifier rubyid_right_value'>right_value</span> <span class='op'>=</span> <span class='id identifier rubyid_right_goal'>right_goal</span><span class='period'>.</span><span class='id identifier rubyid_value_of'>value_of</span><span class='lparen'>(</span><span class='id identifier rubyid_right'>right</span><span class='comma'>,</span> <span class='kw'>nil</span><span class='comma'>,</span> <span class='id identifier rubyid_visited'>visited</span><span class='rparen'>)</span>
|
1375
1818
|
<span class='kw'>if</span> <span class='id identifier rubyid_left_value'>left_value</span> <span class='op'>==</span> <span class='id identifier rubyid_right_value'>right_value</span> <span class='op'>||</span> <span class='id identifier rubyid_right_value'>right_value</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'><span class='object_link'><a href="Porolog/Variable.html" title="Porolog::Variable (class)">Variable</a></span></span><span class='rparen'>)</span> <span class='op'>||</span> <span class='id identifier rubyid_right_value'>right_value</span> <span class='op'>==</span> <span class='const'><span class='object_link'><a href="#UNKNOWN_ARRAY-constant" title="Porolog::UNKNOWN_ARRAY (constant)">UNKNOWN_ARRAY</a></span></span> <span class='op'>||</span> <span class='id identifier rubyid_right_value'>right_value</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span>
|
@@ -1389,8 +1832,8 @@
|
|
1389
1832
|
<span class='kw'>nil</span>
|
1390
1833
|
<span class='kw'>end</span>
|
1391
1834
|
|
1392
|
-
<span class='kw'>when</span> <span class='lbracket'>[</span><span class='symbol'>:array</span><span class='comma'>,</span><span class='symbol'>:atomic</span><span class='rbracket'>]</span><span class='comma'>,</span> <span class='lbracket'>[</span><span class='symbol'>:atomic</span><span class='comma'>,</span><span class='symbol'>:
|
1393
|
-
<span class='id identifier rubyid_msg'>msg</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>Cannot unify </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_left'>left</span><span class='period'>.</span><span class='id identifier rubyid_inspect'>inspect</span><span class='embexpr_end'>}</span><span class='tstring_content'> with </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_right'>right</span><span class='period'>.</span><span class='id identifier rubyid_inspect'>inspect</span><span class='embexpr_end'>}</span><span class='tstring_end'>"</span></span>
|
1835
|
+
<span class='kw'>when</span> <span class='lbracket'>[</span><span class='symbol'>:array</span><span class='comma'>,</span> <span class='symbol'>:atomic</span><span class='rbracket'>]</span><span class='comma'>,</span> <span class='lbracket'>[</span><span class='symbol'>:atomic</span><span class='comma'>,</span> <span class='symbol'>:array</span><span class='rbracket'>]</span><span class='comma'>,</span> <span class='lbracket'>[</span><span class='symbol'>:tail</span><span class='comma'>,</span> <span class='symbol'>:atomic</span><span class='rbracket'>]</span><span class='comma'>,</span> <span class='lbracket'>[</span><span class='symbol'>:atomic</span><span class='comma'>,</span> <span class='symbol'>:tail</span><span class='rbracket'>]</span>
|
1836
|
+
<span class='id identifier rubyid_msg'>msg</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>Cannot unify </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_left'>left</span><span class='period'>.</span><span class='id identifier rubyid_inspect'>inspect</span><span class='embexpr_end'>}</span><span class='tstring_content'> with </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_right'>right</span><span class='period'>.</span><span class='id identifier rubyid_inspect'>inspect</span><span class='embexpr_end'>}</span><span class='tstring_content'> (</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_signature'>signature</span><span class='period'>.</span><span class='id identifier rubyid_join'>join</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'> != </span><span class='tstring_end'>'</span></span><span class='rparen'>)</span><span class='embexpr_end'>}</span><span class='tstring_content'>)</span><span class='tstring_end'>"</span></span>
|
1394
1837
|
<span class='id identifier rubyid_goals'>goals</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span><span class='lbrace'>{</span><span class='op'>|</span><span class='id identifier rubyid_goal'>goal</span><span class='op'>|</span> <span class='id identifier rubyid_goal'>goal</span><span class='period'>.</span><span class='id identifier rubyid_log'>log</span> <span class='op'><<</span> <span class='id identifier rubyid_msg'>msg</span> <span class='rbrace'>}</span>
|
1395
1838
|
<span class='kw'>nil</span>
|
1396
1839
|
|
@@ -1551,47 +1994,47 @@
|
|
1551
1994
|
<pre class="lines">
|
1552
1995
|
|
1553
1996
|
|
1554
|
-
|
1555
|
-
|
1556
|
-
|
1557
|
-
|
1558
|
-
|
1559
|
-
|
1560
|
-
|
1561
|
-
|
1562
|
-
|
1563
|
-
|
1564
|
-
|
1565
|
-
|
1566
|
-
|
1567
|
-
|
1568
|
-
|
1569
|
-
|
1570
|
-
|
1571
|
-
|
1572
|
-
|
1573
|
-
|
1574
|
-
|
1575
|
-
|
1576
|
-
|
1577
|
-
|
1578
|
-
|
1579
|
-
|
1580
|
-
|
1581
|
-
|
1582
|
-
|
1997
|
+
384
|
1998
|
+
385
|
1999
|
+
386
|
2000
|
+
387
|
2001
|
+
388
|
2002
|
+
389
|
2003
|
+
390
|
2004
|
+
391
|
2005
|
+
392
|
2006
|
+
393
|
2007
|
+
394
|
2008
|
+
395
|
2009
|
+
396
|
2010
|
+
397
|
2011
|
+
398
|
2012
|
+
399
|
2013
|
+
400
|
2014
|
+
401
|
2015
|
+
402
|
2016
|
+
403
|
2017
|
+
404
|
2018
|
+
405
|
2019
|
+
406
|
2020
|
+
407
|
2021
|
+
408
|
2022
|
+
409
|
2023
|
+
410
|
2024
|
+
411
|
2025
|
+
412</pre>
|
1583
2026
|
</td>
|
1584
2027
|
<td>
|
1585
|
-
<pre class="code"><span class="info file"># File 'lib/porolog.rb', line
|
2028
|
+
<pre class="code"><span class="info file"># File 'lib/porolog.rb', line 384</span>
|
1586
2029
|
|
1587
2030
|
<span class='kw'>def</span> <span class='id identifier rubyid_unify_arrays'>unify_arrays</span><span class='lparen'>(</span><span class='id identifier rubyid_left'>left</span><span class='comma'>,</span> <span class='id identifier rubyid_right'>right</span><span class='comma'>,</span> <span class='id identifier rubyid_left_goal'>left_goal</span><span class='comma'>,</span> <span class='id identifier rubyid_right_goal'>right_goal</span> <span class='op'>=</span> <span class='id identifier rubyid_left_goal'>left_goal</span><span class='comma'>,</span> <span class='id identifier rubyid_visited'>visited</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='rbracket'>]</span><span class='rparen'>)</span>
|
1588
2031
|
<span class='id identifier rubyid_arrays'>arrays</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='id identifier rubyid_left'>left</span><span class='comma'>,</span> <span class='id identifier rubyid_right'>right</span><span class='rbracket'>]</span>
|
1589
2032
|
<span class='id identifier rubyid_arrays_goals'>arrays_goals</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='id identifier rubyid_left_goal'>left_goal</span><span class='comma'>,</span> <span class='id identifier rubyid_right_goal'>right_goal</span><span class='rbracket'>]</span>
|
1590
|
-
<span class='id identifier rubyid_arrays_values'>arrays_values</span> <span class='op'>=</span> <span class='id identifier rubyid_arrays'>arrays</span><span class='period'>.</span><span class='id identifier rubyid_map'>map</span><span class='
|
2033
|
+
<span class='id identifier rubyid_arrays_values'>arrays_values</span> <span class='op'>=</span> <span class='id identifier rubyid_arrays'>arrays</span><span class='period'>.</span><span class='id identifier rubyid_map'>map</span><span class='lbrace'>{</span><span class='op'>|</span><span class='id identifier rubyid_array'>array</span><span class='op'>|</span> <span class='id identifier rubyid_array'>array</span><span class='period'>.</span><span class='id identifier rubyid_value'>value</span><span class='lparen'>(</span><span class='id identifier rubyid_visited'>visited</span><span class='rparen'>)</span> <span class='rbrace'>}</span>
|
1591
2034
|
|
1592
2035
|
<span class='comment'># -- Trivial Unifications --
|
1593
|
-
</span> <span class='kw'>return</span> <span class='lbracket'>[</span><span class='id identifier rubyid_left_goal'>left_goal</span><span class='period'>.</span> <span class='id identifier rubyid_variablise'>variablise</span><span class='lparen'>(</span><span class='id identifier rubyid_left'>left</span><span class='rparen'>)</span><span class='comma'>,</span>
|
1594
|
-
<span class='kw'>return</span> <span class='lbracket'>[</span><span class='id identifier rubyid_right_goal'>right_goal</span><span class='period'>.</span><span class='id identifier rubyid_variablise'>variablise</span><span class='lparen'>(</span><span class='id identifier rubyid_right'>right</span><span class='rparen'>)</span><span class='comma'>,</span
|
2036
|
+
</span> <span class='kw'>return</span> <span class='lbracket'>[</span><span class='id identifier rubyid_left_goal'>left_goal</span><span class='period'>.</span> <span class='id identifier rubyid_variablise'>variablise</span><span class='lparen'>(</span><span class='id identifier rubyid_left'>left</span><span class='rparen'>)</span><span class='comma'>,</span> <span class='lbracket'>[</span><span class='rbracket'>]</span><span class='rbracket'>]</span> <span class='kw'>if</span> <span class='id identifier rubyid_right'>right</span> <span class='op'>==</span> <span class='const'><span class='object_link'><a href="#UNKNOWN_ARRAY-constant" title="Porolog::UNKNOWN_ARRAY (constant)">UNKNOWN_ARRAY</a></span></span>
|
2037
|
+
<span class='kw'>return</span> <span class='lbracket'>[</span><span class='id identifier rubyid_right_goal'>right_goal</span><span class='period'>.</span><span class='id identifier rubyid_variablise'>variablise</span><span class='lparen'>(</span><span class='id identifier rubyid_right'>right</span><span class='rparen'>)</span><span class='comma'>,</span> <span class='lbracket'>[</span><span class='rbracket'>]</span><span class='rbracket'>]</span> <span class='kw'>if</span> <span class='id identifier rubyid_left'>left</span> <span class='op'>==</span> <span class='const'><span class='object_link'><a href="#UNKNOWN_ARRAY-constant" title="Porolog::UNKNOWN_ARRAY (constant)">UNKNOWN_ARRAY</a></span></span>
|
1595
2038
|
|
1596
2039
|
<span class='comment'># -- Validate Arrays --
|
1597
2040
|
</span> <span class='kw'>unless</span> <span class='id identifier rubyid_arrays_values'>arrays_values</span><span class='period'>.</span><span class='id identifier rubyid_all?'>all?</span><span class='lbrace'>{</span><span class='op'>|</span><span class='id identifier rubyid_array'>array</span><span class='op'>|</span> <span class='id identifier rubyid_array'>array</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'><span class='object_link'><a href="Array.html" title="Array (class)">Array</a></span></span><span class='rparen'>)</span> <span class='op'>||</span> <span class='id identifier rubyid_array'>array</span> <span class='op'>==</span> <span class='const'><span class='object_link'><a href="#UNKNOWN_TAIL-constant" title="Porolog::UNKNOWN_TAIL (constant)">UNKNOWN_TAIL</a></span></span> <span class='rbrace'>}</span>
|
@@ -1605,7 +2048,7 @@
|
|
1605
2048
|
<span class='id identifier rubyid_number_of_tails'>number_of_tails</span> <span class='op'>=</span> <span class='id identifier rubyid_arrays'>arrays</span><span class='period'>.</span><span class='id identifier rubyid_count'>count</span><span class='lbrace'>{</span><span class='op'>|</span><span class='id identifier rubyid_array'>array</span><span class='op'>|</span> <span class='id identifier rubyid_has_tail?'>has_tail?</span><span class='lparen'>(</span><span class='id identifier rubyid_array'>array</span><span class='rparen'>)</span> <span class='rbrace'>}</span>
|
1606
2049
|
|
1607
2050
|
<span class='comment'># -- Handle Tails --
|
1608
|
-
</span> <span class='kw'>if</span> <span class='id identifier rubyid_number_of_tails'>number_of_tails</span
|
2051
|
+
</span> <span class='kw'>if</span> <span class='id identifier rubyid_number_of_tails'>number_of_tails</span><span class='period'>.</span><span class='id identifier rubyid_zero?'>zero?</span>
|
1609
2052
|
<span class='id identifier rubyid_unify_arrays_with_no_tails'>unify_arrays_with_no_tails</span><span class='lparen'>(</span><span class='id identifier rubyid_arrays'>arrays</span><span class='comma'>,</span> <span class='id identifier rubyid_arrays_goals'>arrays_goals</span><span class='comma'>,</span> <span class='id identifier rubyid_visited'>visited</span><span class='rparen'>)</span>
|
1610
2053
|
<span class='kw'>elsif</span> <span class='id identifier rubyid_number_of_tails'>number_of_tails</span> <span class='op'>==</span> <span class='id identifier rubyid_number_of_arrays'>number_of_arrays</span>
|
1611
2054
|
<span class='id identifier rubyid_unify_arrays_with_all_tails'>unify_arrays_with_all_tails</span><span class='lparen'>(</span><span class='id identifier rubyid_arrays'>arrays</span><span class='comma'>,</span> <span class='id identifier rubyid_arrays_goals'>arrays_goals</span><span class='comma'>,</span> <span class='id identifier rubyid_visited'>visited</span><span class='rparen'>)</span>
|
@@ -1702,90 +2145,80 @@
|
|
1702
2145
|
—
|
1703
2146
|
<div class='inline'>
|
1704
2147
|
<p>the merged Array and the unifications to be instantiated.</p>
|
1705
|
-
</div>
|
1706
|
-
|
1707
|
-
</li>
|
1708
|
-
|
1709
|
-
<li>
|
1710
|
-
|
1711
|
-
|
1712
|
-
<span class='type'>(<tt>nil</tt>)</span>
|
1713
|
-
|
1714
|
-
|
1715
|
-
|
1716
|
-
—
|
1717
|
-
<div class='inline'>
|
1718
|
-
<p>if the Arrays cannot be unified.</p>
|
1719
|
-
</div>
|
1720
|
-
|
1721
|
-
</li>
|
1722
|
-
|
1723
|
-
</ul>
|
1724
|
-
|
1725
|
-
</div><table class="source_code">
|
1726
|
-
<tr>
|
1727
|
-
<td>
|
1728
|
-
<pre class="lines">
|
1729
|
-
|
1730
|
-
|
1731
|
-
|
1732
|
-
|
1733
|
-
|
1734
|
-
|
1735
|
-
|
1736
|
-
|
1737
|
-
|
1738
|
-
|
1739
|
-
|
1740
|
-
|
1741
|
-
|
1742
|
-
|
1743
|
-
|
1744
|
-
|
1745
|
-
|
1746
|
-
|
1747
|
-
|
1748
|
-
|
1749
|
-
|
1750
|
-
|
1751
|
-
|
1752
|
-
|
1753
|
-
|
1754
|
-
|
1755
|
-
|
1756
|
-
|
1757
|
-
|
1758
|
-
|
1759
|
-
|
1760
|
-
|
1761
|
-
|
1762
|
-
|
1763
|
-
|
1764
|
-
|
1765
|
-
|
1766
|
-
|
1767
|
-
|
1768
|
-
|
1769
|
-
|
1770
|
-
568
|
1771
|
-
569
|
1772
|
-
570
|
1773
|
-
571
|
1774
|
-
572</pre>
|
2148
|
+
</div>
|
2149
|
+
|
2150
|
+
</li>
|
2151
|
+
|
2152
|
+
<li>
|
2153
|
+
|
2154
|
+
|
2155
|
+
<span class='type'>(<tt>nil</tt>)</span>
|
2156
|
+
|
2157
|
+
|
2158
|
+
|
2159
|
+
—
|
2160
|
+
<div class='inline'>
|
2161
|
+
<p>if the Arrays cannot be unified.</p>
|
2162
|
+
</div>
|
2163
|
+
|
2164
|
+
</li>
|
2165
|
+
|
2166
|
+
</ul>
|
2167
|
+
|
2168
|
+
</div><table class="source_code">
|
2169
|
+
<tr>
|
2170
|
+
<td>
|
2171
|
+
<pre class="lines">
|
2172
|
+
|
2173
|
+
|
2174
|
+
656
|
2175
|
+
657
|
2176
|
+
658
|
2177
|
+
659
|
2178
|
+
660
|
2179
|
+
661
|
2180
|
+
662
|
2181
|
+
663
|
2182
|
+
664
|
2183
|
+
665
|
2184
|
+
666
|
2185
|
+
667
|
2186
|
+
668
|
2187
|
+
669
|
2188
|
+
670
|
2189
|
+
671
|
2190
|
+
672
|
2191
|
+
673
|
2192
|
+
674
|
2193
|
+
675
|
2194
|
+
676
|
2195
|
+
677
|
2196
|
+
678
|
2197
|
+
679
|
2198
|
+
680
|
2199
|
+
681
|
2200
|
+
682
|
2201
|
+
683
|
2202
|
+
684
|
2203
|
+
685
|
2204
|
+
686
|
2205
|
+
687
|
2206
|
+
688
|
2207
|
+
689
|
2208
|
+
690
|
2209
|
+
691
|
2210
|
+
692
|
2211
|
+
693
|
2212
|
+
694</pre>
|
1775
2213
|
</td>
|
1776
2214
|
<td>
|
1777
|
-
<pre class="code"><span class="info file"># File 'lib/porolog.rb', line
|
2215
|
+
<pre class="code"><span class="info file"># File 'lib/porolog.rb', line 656</span>
|
1778
2216
|
|
1779
2217
|
<span class='kw'>def</span> <span class='id identifier rubyid_unify_arrays_with_all_tails'>unify_arrays_with_all_tails</span><span class='lparen'>(</span><span class='id identifier rubyid_arrays'>arrays</span><span class='comma'>,</span> <span class='id identifier rubyid_arrays_goals'>arrays_goals</span><span class='comma'>,</span> <span class='id identifier rubyid_visited'>visited</span><span class='rparen'>)</span>
|
1780
|
-
<span class='id identifier rubyid_unifications'>unifications</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='rbracket'>]</span>
|
1781
|
-
<span class='id identifier rubyid_merged'>merged</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='rbracket'>]</span>
|
1782
|
-
|
1783
2218
|
<span class='comment'># -- All tails --
|
1784
|
-
</span> <span class='id identifier
|
1785
|
-
<span class='id identifier rubyid_arrays'>arrays</span> <span class='op'>=</span> <span class='id identifier rubyid_arrays'>arrays</span><span class='period'>.</span><span class='id identifier rubyid_map'>map</span><span class='lbrace'>{</span><span class='op'>|</span><span class='id identifier rubyid_array'>array</span><span class='op'>|</span>
|
2219
|
+
</span> <span class='id identifier rubyid_arrays'>arrays</span> <span class='op'>=</span> <span class='id identifier rubyid_arrays'>arrays</span><span class='period'>.</span><span class='id identifier rubyid_map'>map</span><span class='lbrace'>{</span><span class='op'>|</span><span class='id identifier rubyid_array'>array</span><span class='op'>|</span>
|
1786
2220
|
<span class='id identifier rubyid_expand_splat'>expand_splat</span><span class='lparen'>(</span><span class='id identifier rubyid_array'>array</span><span class='period'>.</span><span class='id identifier rubyid_headtail?'>headtail?</span> <span class='op'>?</span> <span class='id identifier rubyid_array'>array</span> <span class='op'>:</span> <span class='id identifier rubyid_array'>array</span><span class='period'>.</span><span class='id identifier rubyid_value'>value</span><span class='rparen'>)</span>
|
1787
2221
|
<span class='rbrace'>}</span>
|
1788
|
-
<span class='id identifier rubyid_signature'>signature</span> <span class='op'>=</span> <span class='id identifier rubyid_arrays'>arrays</span><span class='period'>.</span><span class='id identifier rubyid_map'>map</span><span class='lparen'>(</span><span class='op'>&</span><span class='symbol'>:headtail?</span><span class='rparen'>)</span>
|
1789
2222
|
|
1790
2223
|
<span class='comment'># -- Unify Embedded Arrays --
|
1791
2224
|
</span> <span class='kw'>if</span> <span class='id identifier rubyid_arrays'>arrays</span><span class='period'>.</span><span class='id identifier rubyid_any?'>any?</span><span class='lbrace'>{</span><span class='op'>|</span><span class='id identifier rubyid_array'>array</span><span class='op'>|</span> <span class='id identifier rubyid_array'>array</span><span class='period'>.</span><span class='id identifier rubyid_type'>type</span> <span class='op'>==</span> <span class='symbol'>:variable</span> <span class='rbrace'>}</span>
|
@@ -1815,9 +2248,9 @@
|
|
1815
2248
|
<span class='kw'>end</span>
|
1816
2249
|
|
1817
2250
|
<span class='kw'>if</span> <span class='id identifier rubyid_unifications'>unifications</span>
|
1818
|
-
<span class='
|
2251
|
+
<span class='lbracket'>[</span><span class='id identifier rubyid_merged'>merged</span><span class='comma'>,</span> <span class='id identifier rubyid_unifications'>unifications</span><span class='rbracket'>]</span>
|
1819
2252
|
<span class='kw'>else</span>
|
1820
|
-
<span class='kw'>
|
2253
|
+
<span class='kw'>nil</span>
|
1821
2254
|
<span class='kw'>end</span>
|
1822
2255
|
<span class='kw'>end</span></pre>
|
1823
2256
|
</td>
|
@@ -1935,131 +2368,6 @@
|
|
1935
2368
|
<pre class="lines">
|
1936
2369
|
|
1937
2370
|
|
1938
|
-
361
|
1939
|
-
362
|
1940
|
-
363
|
1941
|
-
364
|
1942
|
-
365
|
1943
|
-
366
|
1944
|
-
367
|
1945
|
-
368
|
1946
|
-
369
|
1947
|
-
370
|
1948
|
-
371
|
1949
|
-
372
|
1950
|
-
373
|
1951
|
-
374
|
1952
|
-
375
|
1953
|
-
376
|
1954
|
-
377
|
1955
|
-
378
|
1956
|
-
379
|
1957
|
-
380
|
1958
|
-
381
|
1959
|
-
382
|
1960
|
-
383
|
1961
|
-
384
|
1962
|
-
385
|
1963
|
-
386
|
1964
|
-
387
|
1965
|
-
388
|
1966
|
-
389
|
1967
|
-
390
|
1968
|
-
391
|
1969
|
-
392
|
1970
|
-
393
|
1971
|
-
394
|
1972
|
-
395
|
1973
|
-
396
|
1974
|
-
397
|
1975
|
-
398
|
1976
|
-
399
|
1977
|
-
400
|
1978
|
-
401
|
1979
|
-
402
|
1980
|
-
403
|
1981
|
-
404
|
1982
|
-
405
|
1983
|
-
406
|
1984
|
-
407
|
1985
|
-
408
|
1986
|
-
409
|
1987
|
-
410
|
1988
|
-
411
|
1989
|
-
412
|
1990
|
-
413
|
1991
|
-
414
|
1992
|
-
415
|
1993
|
-
416
|
1994
|
-
417
|
1995
|
-
418
|
1996
|
-
419
|
1997
|
-
420
|
1998
|
-
421
|
1999
|
-
422
|
2000
|
-
423
|
2001
|
-
424
|
2002
|
-
425
|
2003
|
-
426
|
2004
|
-
427
|
2005
|
-
428
|
2006
|
-
429
|
2007
|
-
430
|
2008
|
-
431
|
2009
|
-
432
|
2010
|
-
433
|
2011
|
-
434
|
2012
|
-
435
|
2013
|
-
436
|
2014
|
-
437
|
2015
|
-
438
|
2016
|
-
439
|
2017
|
-
440
|
2018
|
-
441
|
2019
|
-
442
|
2020
|
-
443
|
2021
|
-
444
|
2022
|
-
445
|
2023
|
-
446
|
2024
|
-
447
|
2025
|
-
448
|
2026
|
-
449
|
2027
|
-
450
|
2028
|
-
451
|
2029
|
-
452
|
2030
|
-
453
|
2031
|
-
454
|
2032
|
-
455
|
2033
|
-
456
|
2034
|
-
457
|
2035
|
-
458
|
2036
|
-
459
|
2037
|
-
460
|
2038
|
-
461
|
2039
|
-
462
|
2040
|
-
463
|
2041
|
-
464
|
2042
|
-
465
|
2043
|
-
466
|
2044
|
-
467
|
2045
|
-
468
|
2046
|
-
469
|
2047
|
-
470
|
2048
|
-
471
|
2049
|
-
472
|
2050
|
-
473
|
2051
|
-
474
|
2052
|
-
475
|
2053
|
-
476
|
2054
|
-
477
|
2055
|
-
478
|
2056
|
-
479
|
2057
|
-
480
|
2058
|
-
481
|
2059
|
-
482
|
2060
|
-
483
|
2061
|
-
484
|
2062
|
-
485
|
2063
2371
|
486
|
2064
2372
|
487
|
2065
2373
|
488
|
@@ -2095,10 +2403,137 @@
|
|
2095
2403
|
518
|
2096
2404
|
519
|
2097
2405
|
520
|
2098
|
-
521
|
2406
|
+
521
|
2407
|
+
522
|
2408
|
+
523
|
2409
|
+
524
|
2410
|
+
525
|
2411
|
+
526
|
2412
|
+
527
|
2413
|
+
528
|
2414
|
+
529
|
2415
|
+
530
|
2416
|
+
531
|
2417
|
+
532
|
2418
|
+
533
|
2419
|
+
534
|
2420
|
+
535
|
2421
|
+
536
|
2422
|
+
537
|
2423
|
+
538
|
2424
|
+
539
|
2425
|
+
540
|
2426
|
+
541
|
2427
|
+
542
|
2428
|
+
543
|
2429
|
+
544
|
2430
|
+
545
|
2431
|
+
546
|
2432
|
+
547
|
2433
|
+
548
|
2434
|
+
549
|
2435
|
+
550
|
2436
|
+
551
|
2437
|
+
552
|
2438
|
+
553
|
2439
|
+
554
|
2440
|
+
555
|
2441
|
+
556
|
2442
|
+
557
|
2443
|
+
558
|
2444
|
+
559
|
2445
|
+
560
|
2446
|
+
561
|
2447
|
+
562
|
2448
|
+
563
|
2449
|
+
564
|
2450
|
+
565
|
2451
|
+
566
|
2452
|
+
567
|
2453
|
+
568
|
2454
|
+
569
|
2455
|
+
570
|
2456
|
+
571
|
2457
|
+
572
|
2458
|
+
573
|
2459
|
+
574
|
2460
|
+
575
|
2461
|
+
576
|
2462
|
+
577
|
2463
|
+
578
|
2464
|
+
579
|
2465
|
+
580
|
2466
|
+
581
|
2467
|
+
582
|
2468
|
+
583
|
2469
|
+
584
|
2470
|
+
585
|
2471
|
+
586
|
2472
|
+
587
|
2473
|
+
588
|
2474
|
+
589
|
2475
|
+
590
|
2476
|
+
591
|
2477
|
+
592
|
2478
|
+
593
|
2479
|
+
594
|
2480
|
+
595
|
2481
|
+
596
|
2482
|
+
597
|
2483
|
+
598
|
2484
|
+
599
|
2485
|
+
600
|
2486
|
+
601
|
2487
|
+
602
|
2488
|
+
603
|
2489
|
+
604
|
2490
|
+
605
|
2491
|
+
606
|
2492
|
+
607
|
2493
|
+
608
|
2494
|
+
609
|
2495
|
+
610
|
2496
|
+
611
|
2497
|
+
612
|
2498
|
+
613
|
2499
|
+
614
|
2500
|
+
615
|
2501
|
+
616
|
2502
|
+
617
|
2503
|
+
618
|
2504
|
+
619
|
2505
|
+
620
|
2506
|
+
621
|
2507
|
+
622
|
2508
|
+
623
|
2509
|
+
624
|
2510
|
+
625
|
2511
|
+
626
|
2512
|
+
627
|
2513
|
+
628
|
2514
|
+
629
|
2515
|
+
630
|
2516
|
+
631
|
2517
|
+
632
|
2518
|
+
633
|
2519
|
+
634
|
2520
|
+
635
|
2521
|
+
636
|
2522
|
+
637
|
2523
|
+
638
|
2524
|
+
639
|
2525
|
+
640
|
2526
|
+
641
|
2527
|
+
642
|
2528
|
+
643
|
2529
|
+
644
|
2530
|
+
645
|
2531
|
+
646
|
2532
|
+
647
|
2533
|
+
648</pre>
|
2099
2534
|
</td>
|
2100
2535
|
<td>
|
2101
|
-
<pre class="code"><span class="info file"># File 'lib/porolog.rb', line
|
2536
|
+
<pre class="code"><span class="info file"># File 'lib/porolog.rb', line 486</span>
|
2102
2537
|
|
2103
2538
|
<span class='kw'>def</span> <span class='id identifier rubyid_unify_arrays_with_no_tails'>unify_arrays_with_no_tails</span><span class='lparen'>(</span><span class='id identifier rubyid_arrays'>arrays</span><span class='comma'>,</span> <span class='id identifier rubyid_arrays_goals'>arrays_goals</span><span class='comma'>,</span> <span class='id identifier rubyid_visited'>visited</span><span class='rparen'>)</span>
|
2104
2539
|
<span class='comment'># -- Validate Arrays --
|
@@ -2125,12 +2560,14 @@
|
|
2125
2560
|
|
2126
2561
|
<span class='kw'>if</span> <span class='id identifier rubyid_arrays_goals'>arrays_goals</span><span class='lbracket'>[</span><span class='id identifier rubyid_index'>index</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span>
|
2127
2562
|
<span class='id identifier rubyid_value_with_goal'>value_with_goal</span> <span class='op'>=</span> <span class='id identifier rubyid_array'>array</span><span class='period'>.</span><span class='id identifier rubyid_find'>find</span><span class='lbrace'>{</span><span class='op'>|</span><span class='id identifier rubyid_element'>element</span><span class='op'>|</span> <span class='id identifier rubyid_element'>element</span><span class='period'>.</span><span class='id identifier rubyid_respond_to?'>respond_to?</span><span class='lparen'>(</span><span class='symbol'>:goal</span><span class='rparen'>)</span> <span class='rbrace'>}</span>
|
2128
|
-
<span class='id identifier rubyid_arrays_goals'>arrays_goals</span><span class='lbracket'>[</span><span class='id identifier rubyid_index'>index</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_value_with_goal'>value_with_goal</span><span class='period'>.</span><span class='id identifier rubyid_goal'>goal</span> <span class='kw'>if</span> <span class='id identifier rubyid_value_with_goal'>value_with_goal</span
|
2563
|
+
<span class='id identifier rubyid_arrays_goals'>arrays_goals</span><span class='lbracket'>[</span><span class='id identifier rubyid_index'>index</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_value_with_goal'>value_with_goal</span><span class='period'>.</span><span class='id identifier rubyid_goal'>goal</span> <span class='kw'>if</span> <span class='id identifier rubyid_value_with_goal'>value_with_goal</span><span class='op'>&.</span><span class='id identifier rubyid_goal'>goal</span>
|
2129
2564
|
<span class='kw'>end</span>
|
2130
2565
|
|
2131
2566
|
<span class='kw'>if</span> <span class='id identifier rubyid_arrays_goals'>arrays_goals</span><span class='lbracket'>[</span><span class='id identifier rubyid_index'>index</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span>
|
2132
|
-
<span class='
|
2133
|
-
|
2567
|
+
<span class='comment'># :nocov:
|
2568
|
+
</span> <span class='id identifier rubyid_raise'>raise</span> <span class='const'><span class='object_link'><a href="Porolog/NoGoalError.html" title="Porolog::NoGoalError (class)">NoGoalError</a></span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>Array </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_array'>array</span><span class='period'>.</span><span class='id identifier rubyid_inspect'>inspect</span><span class='embexpr_end'>}</span><span class='tstring_content'> has no goal for unification</span><span class='tstring_end'>"</span></span>
|
2569
|
+
<span class='comment'># :nocov:
|
2570
|
+
</span> <span class='kw'>end</span>
|
2134
2571
|
|
2135
2572
|
<span class='id identifier rubyid_arrays_values'>arrays_values</span><span class='lbracket'>[</span><span class='id identifier rubyid_index'>index</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_expand_splat'>expand_splat</span><span class='lparen'>(</span><span class='id identifier rubyid_arrays_values'>arrays_values</span><span class='lbracket'>[</span><span class='id identifier rubyid_index'>index</span><span class='rbracket'>]</span><span class='rparen'>)</span>
|
2136
2573
|
<span class='kw'>end</span>
|
@@ -2145,10 +2582,10 @@
|
|
2145
2582
|
|
2146
2583
|
<span class='comment'># -- Remap Arrays so that they are variablised and valuised with their Goals --
|
2147
2584
|
</span> <span class='id identifier rubyid_new_arrays'>new_arrays</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='rbracket'>]</span>
|
2148
|
-
<span class='id identifier rubyid_arrays_variables'>arrays_variables</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_goal'>goal</span><span class='comma'>,</span
|
2585
|
+
<span class='id identifier rubyid_arrays_variables'>arrays_variables</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_goal'>goal</span><span class='comma'>,</span> <span class='id identifier rubyid_variables'>variables</span><span class='op'>|</span>
|
2149
2586
|
<span class='id identifier rubyid_new_array'>new_array</span> <span class='op'>=</span> <span class='id identifier rubyid_variables'>variables</span><span class='period'>.</span><span class='id identifier rubyid_map'>map</span><span class='lbrace'>{</span><span class='op'>|</span><span class='id identifier rubyid_variable'>variable</span><span class='op'>|</span>
|
2150
2587
|
<span class='id identifier rubyid_value'>value</span> <span class='op'>=</span> <span class='id identifier rubyid_goal'>goal</span><span class='period'>.</span><span class='id identifier rubyid_value_of'>value_of</span><span class='lparen'>(</span><span class='id identifier rubyid_variable'>variable</span><span class='comma'>,</span> <span class='kw'>nil</span><span class='comma'>,</span> <span class='id identifier rubyid_visited'>visited</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_value'>value</span>
|
2151
|
-
<span class='id identifier rubyid_value'>value</span> <span class='op'>=</span> <span class='id identifier rubyid_variable'>variable</span> <span class='kw'>if</span> <span class='
|
2588
|
+
<span class='id identifier rubyid_value'>value</span> <span class='op'>=</span> <span class='id identifier rubyid_variable'>variable</span> <span class='kw'>if</span> <span class='lbracket'>[</span><span class='const'><span class='object_link'><a href="#UNKNOWN_TAIL-constant" title="Porolog::UNKNOWN_TAIL (constant)">UNKNOWN_TAIL</a></span></span><span class='comma'>,</span> <span class='const'><span class='object_link'><a href="#UNKNOWN_ARRAY-constant" title="Porolog::UNKNOWN_ARRAY (constant)">UNKNOWN_ARRAY</a></span></span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_include?'>include?</span><span class='lparen'>(</span><span class='id identifier rubyid_value'>value</span><span class='rparen'>)</span>
|
2152
2589
|
|
2153
2590
|
<span class='kw'>if</span> <span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_type'>type</span> <span class='op'>==</span> <span class='symbol'>:variable</span>
|
2154
2591
|
<span class='id identifier rubyid_value'>value</span> <span class='op'>=</span> <span class='id identifier rubyid_goal'>goal</span><span class='period'>.</span><span class='id identifier rubyid_variable'>variable</span><span class='lparen'>(</span><span class='id identifier rubyid_value'>value</span><span class='rparen'>)</span>
|
@@ -2182,10 +2619,10 @@
|
|
2182
2619
|
<span class='id identifier rubyid_merged'>merged</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='rbracket'>]</span>
|
2183
2620
|
|
2184
2621
|
<span class='comment'># TODO: Change these names
|
2185
|
-
</span> <span class='id identifier rubyid_zipped'>zipped</span><span class='period'>.</span><span class='id identifier
|
2622
|
+
</span> <span class='id identifier rubyid_zipped'>zipped</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span><span class='lbrace'>{</span><span class='op'>|</span><span class='id identifier rubyid_values_to_unify'>values_to_unify</span><span class='op'>|</span>
|
2186
2623
|
<span class='id identifier rubyid_values_to_unify_values'>values_to_unify_values</span> <span class='op'>=</span> <span class='id identifier rubyid_values_to_unify'>values_to_unify</span><span class='period'>.</span><span class='id identifier rubyid_map'>map</span><span class='lbrace'>{</span><span class='op'>|</span><span class='id identifier rubyid_value'>value</span><span class='op'>|</span>
|
2187
2624
|
<span class='id identifier rubyid_value_value'>value_value</span> <span class='op'>=</span> <span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_value'>value</span>
|
2188
|
-
<span class='kw'>if</span> <span class='
|
2625
|
+
<span class='kw'>if</span> <span class='lbracket'>[</span><span class='const'><span class='object_link'><a href="#UNKNOWN_TAIL-constant" title="Porolog::UNKNOWN_TAIL (constant)">UNKNOWN_TAIL</a></span></span><span class='comma'>,</span> <span class='const'><span class='object_link'><a href="#UNKNOWN_ARRAY-constant" title="Porolog::UNKNOWN_ARRAY (constant)">UNKNOWN_ARRAY</a></span></span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_include?'>include?</span><span class='lparen'>(</span><span class='id identifier rubyid_value_value'>value_value</span><span class='rparen'>)</span>
|
2189
2626
|
<span class='id identifier rubyid_value'>value</span>
|
2190
2627
|
<span class='kw'>else</span>
|
2191
2628
|
<span class='id identifier rubyid_value_value'>value_value</span>
|
@@ -2376,128 +2813,127 @@
|
|
2376
2813
|
<pre class="lines">
|
2377
2814
|
|
2378
2815
|
|
2379
|
-
|
2380
|
-
|
2381
|
-
|
2382
|
-
|
2383
|
-
|
2384
|
-
|
2385
|
-
|
2386
|
-
|
2387
|
-
|
2388
|
-
|
2389
|
-
|
2390
|
-
|
2391
|
-
|
2392
|
-
|
2393
|
-
|
2394
|
-
|
2395
|
-
|
2396
|
-
|
2397
|
-
|
2398
|
-
|
2399
|
-
|
2400
|
-
|
2401
|
-
|
2402
|
-
|
2403
|
-
|
2404
|
-
|
2405
|
-
|
2406
|
-
|
2407
|
-
|
2408
|
-
|
2409
|
-
|
2410
|
-
|
2411
|
-
|
2412
|
-
|
2413
|
-
|
2414
|
-
|
2415
|
-
|
2416
|
-
|
2417
|
-
|
2418
|
-
|
2419
|
-
|
2420
|
-
|
2421
|
-
|
2422
|
-
|
2423
|
-
|
2424
|
-
|
2425
|
-
|
2426
|
-
|
2427
|
-
|
2428
|
-
|
2429
|
-
|
2430
|
-
|
2431
|
-
|
2432
|
-
|
2433
|
-
|
2434
|
-
|
2435
|
-
|
2436
|
-
|
2437
|
-
|
2438
|
-
|
2439
|
-
|
2440
|
-
|
2441
|
-
|
2442
|
-
|
2443
|
-
|
2444
|
-
|
2445
|
-
|
2446
|
-
|
2447
|
-
|
2448
|
-
|
2449
|
-
|
2450
|
-
|
2451
|
-
|
2452
|
-
|
2453
|
-
|
2454
|
-
|
2455
|
-
|
2456
|
-
|
2457
|
-
|
2458
|
-
|
2459
|
-
|
2460
|
-
|
2461
|
-
|
2462
|
-
|
2463
|
-
|
2464
|
-
|
2465
|
-
|
2466
|
-
|
2467
|
-
|
2468
|
-
|
2469
|
-
|
2470
|
-
|
2471
|
-
|
2472
|
-
|
2473
|
-
|
2474
|
-
|
2475
|
-
|
2476
|
-
|
2477
|
-
|
2478
|
-
|
2479
|
-
|
2480
|
-
|
2481
|
-
|
2482
|
-
|
2483
|
-
|
2484
|
-
|
2485
|
-
|
2486
|
-
|
2487
|
-
|
2488
|
-
|
2489
|
-
|
2490
|
-
|
2491
|
-
|
2492
|
-
|
2493
|
-
|
2494
|
-
|
2495
|
-
|
2496
|
-
|
2497
|
-
1045</pre>
|
2816
|
+
1051
|
2817
|
+
1052
|
2818
|
+
1053
|
2819
|
+
1054
|
2820
|
+
1055
|
2821
|
+
1056
|
2822
|
+
1057
|
2823
|
+
1058
|
2824
|
+
1059
|
2825
|
+
1060
|
2826
|
+
1061
|
2827
|
+
1062
|
2828
|
+
1063
|
2829
|
+
1064
|
2830
|
+
1065
|
2831
|
+
1066
|
2832
|
+
1067
|
2833
|
+
1068
|
2834
|
+
1069
|
2835
|
+
1070
|
2836
|
+
1071
|
2837
|
+
1072
|
2838
|
+
1073
|
2839
|
+
1074
|
2840
|
+
1075
|
2841
|
+
1076
|
2842
|
+
1077
|
2843
|
+
1078
|
2844
|
+
1079
|
2845
|
+
1080
|
2846
|
+
1081
|
2847
|
+
1082
|
2848
|
+
1083
|
2849
|
+
1084
|
2850
|
+
1085
|
2851
|
+
1086
|
2852
|
+
1087
|
2853
|
+
1088
|
2854
|
+
1089
|
2855
|
+
1090
|
2856
|
+
1091
|
2857
|
+
1092
|
2858
|
+
1093
|
2859
|
+
1094
|
2860
|
+
1095
|
2861
|
+
1096
|
2862
|
+
1097
|
2863
|
+
1098
|
2864
|
+
1099
|
2865
|
+
1100
|
2866
|
+
1101
|
2867
|
+
1102
|
2868
|
+
1103
|
2869
|
+
1104
|
2870
|
+
1105
|
2871
|
+
1106
|
2872
|
+
1107
|
2873
|
+
1108
|
2874
|
+
1109
|
2875
|
+
1110
|
2876
|
+
1111
|
2877
|
+
1112
|
2878
|
+
1113
|
2879
|
+
1114
|
2880
|
+
1115
|
2881
|
+
1116
|
2882
|
+
1117
|
2883
|
+
1118
|
2884
|
+
1119
|
2885
|
+
1120
|
2886
|
+
1121
|
2887
|
+
1122
|
2888
|
+
1123
|
2889
|
+
1124
|
2890
|
+
1125
|
2891
|
+
1126
|
2892
|
+
1127
|
2893
|
+
1128
|
2894
|
+
1129
|
2895
|
+
1130
|
2896
|
+
1131
|
2897
|
+
1132
|
2898
|
+
1133
|
2899
|
+
1134
|
2900
|
+
1135
|
2901
|
+
1136
|
2902
|
+
1137
|
2903
|
+
1138
|
2904
|
+
1139
|
2905
|
+
1140
|
2906
|
+
1141
|
2907
|
+
1142
|
2908
|
+
1143
|
2909
|
+
1144
|
2910
|
+
1145
|
2911
|
+
1146
|
2912
|
+
1147
|
2913
|
+
1148
|
2914
|
+
1149
|
2915
|
+
1150
|
2916
|
+
1151
|
2917
|
+
1152
|
2918
|
+
1153
|
2919
|
+
1154
|
2920
|
+
1155
|
2921
|
+
1156
|
2922
|
+
1157
|
2923
|
+
1158
|
2924
|
+
1159
|
2925
|
+
1160
|
2926
|
+
1161
|
2927
|
+
1162
|
2928
|
+
1163
|
2929
|
+
1164
|
2930
|
+
1165
|
2931
|
+
1166
|
2932
|
+
1167
|
2933
|
+
1168</pre>
|
2498
2934
|
</td>
|
2499
2935
|
<td>
|
2500
|
-
<pre class="code"><span class="info file"># File 'lib/porolog.rb', line
|
2936
|
+
<pre class="code"><span class="info file"># File 'lib/porolog.rb', line 1051</span>
|
2501
2937
|
|
2502
2938
|
<span class='kw'>def</span> <span class='id identifier rubyid_unify_arrays_with_some_tails'>unify_arrays_with_some_tails</span><span class='lparen'>(</span><span class='id identifier rubyid_arrays'>arrays</span><span class='comma'>,</span> <span class='id identifier rubyid_arrays_goals'>arrays_goals</span><span class='comma'>,</span> <span class='id identifier rubyid_visited'>visited</span><span class='rparen'>)</span>
|
2503
2939
|
<span class='comment'># -- Variablise Arrays --
|
@@ -2506,7 +2942,7 @@
|
|
2506
2942
|
<span class='id identifier rubyid_goal'>goal</span> <span class='op'>=</span> <span class='id identifier rubyid_array'>array</span><span class='period'>.</span><span class='id identifier rubyid_goal'>goal</span> <span class='kw'>if</span> <span class='id identifier rubyid_array'>array</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'><span class='object_link'><a href="Porolog/Value.html" title="Porolog::Value (class)">Value</a></span></span><span class='rparen'>)</span>
|
2507
2943
|
<span class='kw'>if</span> <span class='id identifier rubyid_goal'>goal</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span> <span class='op'>&&</span> <span class='id identifier rubyid_array'>array</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'><span class='object_link'><a href="Array.html" title="Array (class)">Array</a></span></span><span class='rparen'>)</span>
|
2508
2944
|
<span class='id identifier rubyid_v'>v</span> <span class='op'>=</span> <span class='id identifier rubyid_array'>array</span><span class='period'>.</span><span class='id identifier rubyid_find'>find</span><span class='lbrace'>{</span><span class='op'>|</span><span class='id identifier rubyid_element'>element</span><span class='op'>|</span> <span class='id identifier rubyid_element'>element</span><span class='period'>.</span><span class='id identifier rubyid_respond_to?'>respond_to?</span><span class='lparen'>(</span><span class='symbol'>:goal</span><span class='rparen'>)</span> <span class='rbrace'>}</span>
|
2509
|
-
<span class='id identifier rubyid_goal'>goal</span> <span class='op'>=</span> <span class='id identifier rubyid_v'>v</span
|
2945
|
+
<span class='id identifier rubyid_goal'>goal</span> <span class='op'>=</span> <span class='id identifier rubyid_v'>v</span><span class='op'>&.</span><span class='id identifier rubyid_goal'>goal</span>
|
2510
2946
|
<span class='kw'>end</span>
|
2511
2947
|
<span class='kw'>end</span>
|
2512
2948
|
<span class='id identifier rubyid_goal'>goal</span> <span class='op'>=</span> <span class='id identifier rubyid_arrays_goals'>arrays_goals</span><span class='period'>.</span><span class='id identifier rubyid_compact'>compact</span><span class='period'>.</span><span class='id identifier rubyid_last'>last</span> <span class='kw'>if</span> <span class='id identifier rubyid_goal'>goal</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span>
|
@@ -2576,7 +3012,6 @@
|
|
2576
3012
|
<span class='id identifier rubyid_value_values'>value_values</span> <span class='op'>=</span> <span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_map'>map</span><span class='lparen'>(</span><span class='op'>&</span><span class='symbol'>:value</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_compact'>compact</span><span class='period'>.</span><span class='id identifier rubyid_uniq'>uniq</span>
|
2577
3013
|
<span class='kw'>if</span> <span class='id identifier rubyid_value_values'>value_values</span><span class='period'>.</span><span class='id identifier rubyid_size'>size</span> <span class='op'><=</span> <span class='int'>1</span>
|
2578
3014
|
<span class='id identifier rubyid_m'>m</span> <span class='op'>=</span> <span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_first'>first</span><span class='period'>.</span><span class='id identifier rubyid_value'>value</span>
|
2579
|
-
<span class='id identifier rubyid_m'>m</span> <span class='op'>=</span> <span class='kw'>nil</span> <span class='kw'>if</span> <span class='id identifier rubyid_m'>m</span><span class='period'>.</span><span class='id identifier rubyid_type'>type</span> <span class='op'>==</span> <span class='symbol'>:variable</span>
|
2580
3015
|
<span class='id identifier rubyid_merged'>merged</span> <span class='op'><<</span> <span class='id identifier rubyid_m'>m</span>
|
2581
3016
|
<span class='kw'>else</span>
|
2582
3017
|
<span class='kw'>if</span> <span class='id identifier rubyid_values'>values</span><span class='period'>.</span><span class='id identifier rubyid_variables'>variables</span><span class='period'>.</span><span class='id identifier rubyid_empty?'>empty?</span>
|
@@ -2589,7 +3024,6 @@
|
|
2589
3024
|
<span class='id identifier rubyid__variables'>_variables</span><span class='comma'>,</span> <span class='id identifier rubyid_nonvariables'>nonvariables</span> <span class='op'>=</span> <span class='id identifier rubyid_values'>values</span><span class='period'>.</span><span class='id identifier rubyid_reject'>reject</span><span class='lbrace'>{</span><span class='op'>|</span><span class='id identifier rubyid_v'>v</span><span class='op'>|</span> <span class='id identifier rubyid_v'>v</span><span class='period'>.</span><span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span> <span class='rbrace'>}</span><span class='period'>.</span><span class='id identifier rubyid_partition'>partition</span><span class='lbrace'>{</span><span class='op'>|</span><span class='id identifier rubyid_element'>element</span><span class='op'>|</span> <span class='id identifier rubyid_element'>element</span><span class='period'>.</span><span class='id identifier rubyid_type'>type</span> <span class='op'>==</span> <span class='symbol'>:variable</span> <span class='rbrace'>}</span>
|
2590
3025
|
<span class='kw'>if</span> <span class='id identifier rubyid_nonvariables'>nonvariables</span><span class='period'>.</span><span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_uniq'>uniq</span><span class='period'>.</span><span class='id identifier rubyid_size'>size</span> <span class='op'><=</span> <span class='int'>1</span>
|
2591
3026
|
<span class='id identifier rubyid_m'>m</span> <span class='op'>=</span> <span class='id identifier rubyid_nonvariables'>nonvariables</span><span class='period'>.</span><span class='id identifier rubyid_first'>first</span><span class='period'>.</span><span class='id identifier rubyid_value'>value</span>
|
2592
|
-
<span class='id identifier rubyid_m'>m</span> <span class='op'>=</span> <span class='kw'>nil</span> <span class='kw'>if</span> <span class='id identifier rubyid_m'>m</span><span class='period'>.</span><span class='id identifier rubyid_type'>type</span> <span class='op'>==</span> <span class='symbol'>:variable</span>
|
2593
3027
|
<span class='id identifier rubyid_merged'>merged</span> <span class='op'><<</span> <span class='id identifier rubyid_m'>m</span>
|
2594
3028
|
|
2595
3029
|
<span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_combination'>combination</span><span class='lparen'>(</span><span class='int'>2</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_vl'>vl</span><span class='comma'>,</span> <span class='id identifier rubyid_vr'>vr</span><span class='op'>|</span>
|
@@ -2610,7 +3044,8 @@
|
|
2610
3044
|
<span class='kw'>end</span>
|
2611
3045
|
<span class='rbrace'>}</span>
|
2612
3046
|
|
2613
|
-
<span class='
|
3047
|
+
<span class='comment'># -- Unify Tails --
|
3048
|
+
</span> <span class='id identifier rubyid_tails'>tails</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_head_size'>head_size</span><span class='comma'>,</span><span class='id identifier rubyid_tail'>tail</span><span class='comma'>,</span><span class='id identifier rubyid_goal'>goal</span><span class='op'>|</span>
|
2614
3049
|
<span class='kw'>next</span> <span class='kw'>if</span> <span class='id identifier rubyid_tail'>tail</span> <span class='op'>==</span> <span class='const'><span class='object_link'><a href="#UNKNOWN_TAIL-constant" title="Porolog::UNKNOWN_TAIL (constant)">UNKNOWN_TAIL</a></span></span>
|
2615
3050
|
<span class='id identifier rubyid_merged_goals'>merged_goals</span> <span class='op'>=</span> <span class='id identifier rubyid_arrays_goals'>arrays_goals</span> <span class='op'>-</span> <span class='lbracket'>[</span><span class='id identifier rubyid_goal'>goal</span><span class='rbracket'>]</span> <span class='op'>+</span> <span class='lbracket'>[</span><span class='id identifier rubyid_goal'>goal</span><span class='rbracket'>]</span>
|
2616
3051
|
<span class='id identifier rubyid_unifications'>unifications</span> <span class='op'><<</span> <span class='lbracket'>[</span><span class='id identifier rubyid_tail'>tail</span><span class='period'>.</span><span class='id identifier rubyid_value'>value</span><span class='lparen'>(</span><span class='id identifier rubyid_visited'>visited</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_value'>value</span><span class='lparen'>(</span><span class='id identifier rubyid_visited'>visited</span><span class='rparen'>)</span><span class='comma'>,</span> <span class='id identifier rubyid_merged'>merged</span><span class='lbracket'>[</span><span class='id identifier rubyid_head_size'>head_size</span><span class='op'>..</span><span class='op'>-</span><span class='int'>1</span><span class='rbracket'>]</span><span class='comma'>,</span> <span class='id identifier rubyid_goal'>goal</span><span class='comma'>,</span> <span class='id identifier rubyid_merged_goals'>merged_goals</span><span class='period'>.</span><span class='id identifier rubyid_compact'>compact</span><span class='period'>.</span><span class='id identifier rubyid_first'>first</span><span class='rbracket'>]</span>
|
@@ -2626,7 +3061,7 @@
|
|
2626
3061
|
<div class="method_details ">
|
2627
3062
|
<h3 class="signature " id="unify_goals-instance_method">
|
2628
3063
|
|
2629
|
-
#<strong>unify_goals</strong>(goal, subgoal) ⇒ <tt>
|
3064
|
+
#<strong>unify_goals</strong>(goal, subgoal) ⇒ <tt><span class='object_link'><a href="Array.html" title="Array (class)">Array</a></span><<span class='object_link'><a href="Porolog/Instantiation.html" title="Porolog::Instantiation (class)">Porolog::Instantiation</a></span>></tt>, ...
|
2630
3065
|
|
2631
3066
|
|
2632
3067
|
|
@@ -2684,13 +3119,41 @@
|
|
2684
3119
|
<li>
|
2685
3120
|
|
2686
3121
|
|
2687
|
-
<span class='type'>(<tt>
|
3122
|
+
<span class='type'>(<tt><span class='object_link'><a href="Array.html" title="Array (class)">Array</a></span><<span class='object_link'><a href="Porolog/Instantiation.html" title="Porolog::Instantiation (class)">Porolog::Instantiation</a></span>></tt>)</span>
|
3123
|
+
|
3124
|
+
|
3125
|
+
|
3126
|
+
—
|
3127
|
+
<div class='inline'>
|
3128
|
+
<p>the instantiations if the goals can be unified and instantiated.</p>
|
3129
|
+
</div>
|
3130
|
+
|
3131
|
+
</li>
|
3132
|
+
|
3133
|
+
<li>
|
3134
|
+
|
3135
|
+
|
3136
|
+
<span class='type'>(<tt>false</tt>)</span>
|
3137
|
+
|
3138
|
+
|
3139
|
+
|
3140
|
+
—
|
3141
|
+
<div class='inline'>
|
3142
|
+
<p>if they cannot be unified.</p>
|
3143
|
+
</div>
|
3144
|
+
|
3145
|
+
</li>
|
3146
|
+
|
3147
|
+
<li>
|
3148
|
+
|
3149
|
+
|
3150
|
+
<span class='type'>(<tt>nil</tt>)</span>
|
2688
3151
|
|
2689
3152
|
|
2690
3153
|
|
2691
3154
|
—
|
2692
3155
|
<div class='inline'>
|
2693
|
-
<p>
|
3156
|
+
<p>if they can be unified but the instantiations are inconsistent.</p>
|
2694
3157
|
</div>
|
2695
3158
|
|
2696
3159
|
</li>
|
@@ -2703,27 +3166,27 @@
|
|
2703
3166
|
<pre class="lines">
|
2704
3167
|
|
2705
3168
|
|
2706
|
-
|
2707
|
-
|
2708
|
-
|
2709
|
-
|
2710
|
-
|
2711
|
-
|
2712
|
-
|
2713
|
-
|
2714
|
-
|
2715
|
-
|
2716
|
-
|
2717
|
-
|
2718
|
-
|
2719
|
-
|
2720
|
-
|
2721
|
-
|
2722
|
-
|
2723
|
-
|
3169
|
+
142
|
3170
|
+
143
|
3171
|
+
144
|
3172
|
+
145
|
3173
|
+
146
|
3174
|
+
147
|
3175
|
+
148
|
3176
|
+
149
|
3177
|
+
150
|
3178
|
+
151
|
3179
|
+
152
|
3180
|
+
153
|
3181
|
+
154
|
3182
|
+
155
|
3183
|
+
156
|
3184
|
+
157
|
3185
|
+
158
|
3186
|
+
159</pre>
|
2724
3187
|
</td>
|
2725
3188
|
<td>
|
2726
|
-
<pre class="code"><span class="info file"># File 'lib/porolog.rb', line
|
3189
|
+
<pre class="code"><span class="info file"># File 'lib/porolog.rb', line 142</span>
|
2727
3190
|
|
2728
3191
|
<span class='kw'>def</span> <span class='id identifier rubyid_unify_goals'>unify_goals</span><span class='lparen'>(</span><span class='id identifier rubyid_goal'>goal</span><span class='comma'>,</span> <span class='id identifier rubyid_subgoal'>subgoal</span><span class='rparen'>)</span>
|
2729
3192
|
<span class='kw'>if</span> <span class='id identifier rubyid_goal'>goal</span><span class='period'>.</span><span class='id identifier rubyid_arguments'>arguments</span><span class='period'>.</span><span class='id identifier rubyid_predicate'>predicate</span> <span class='op'>==</span> <span class='id identifier rubyid_subgoal'>subgoal</span><span class='period'>.</span><span class='id identifier rubyid_arguments'>arguments</span><span class='period'>.</span><span class='id identifier rubyid_predicate'>predicate</span>
|
@@ -2827,94 +3290,94 @@
|
|
2827
3290
|
|
2828
3291
|
<span class='type'>(<tt><span class='object_link'><a href="Array.html" title="Array (class)">Array</a></span><<span class='object_link'><a href="Array.html" title="Array (class)">Array</a></span>, <span class='object_link'><a href="Array.html" title="Array (class)">Array</a></span>></tt>)</span>
|
2829
3292
|
|
2830
|
-
|
2831
|
-
|
2832
|
-
—
|
2833
|
-
<div class='inline'>
|
2834
|
-
<p>the merged Array and the unifications to be instantiated.</p>
|
2835
|
-
</div>
|
2836
|
-
|
2837
|
-
</li>
|
2838
|
-
|
2839
|
-
<li>
|
2840
|
-
|
2841
|
-
|
2842
|
-
<span class='type'>(<tt>nil</tt>)</span>
|
2843
|
-
|
2844
|
-
|
2845
|
-
|
2846
|
-
—
|
2847
|
-
<div class='inline'>
|
2848
|
-
<p>if the Arrays cannot be unified.</p>
|
2849
|
-
</div>
|
2850
|
-
|
2851
|
-
</li>
|
2852
|
-
|
2853
|
-
</ul>
|
2854
|
-
|
2855
|
-
</div><table class="source_code">
|
2856
|
-
<tr>
|
2857
|
-
<td>
|
2858
|
-
<pre class="lines">
|
2859
|
-
|
2860
|
-
|
2861
|
-
|
2862
|
-
|
2863
|
-
|
2864
|
-
|
2865
|
-
|
2866
|
-
|
2867
|
-
|
2868
|
-
|
2869
|
-
|
2870
|
-
|
2871
|
-
|
2872
|
-
|
2873
|
-
|
2874
|
-
|
2875
|
-
|
2876
|
-
|
2877
|
-
|
2878
|
-
|
2879
|
-
|
2880
|
-
|
2881
|
-
|
2882
|
-
|
2883
|
-
|
2884
|
-
|
2885
|
-
|
2886
|
-
|
2887
|
-
|
2888
|
-
|
2889
|
-
|
2890
|
-
|
2891
|
-
|
2892
|
-
|
2893
|
-
|
2894
|
-
|
2895
|
-
|
2896
|
-
|
2897
|
-
|
2898
|
-
|
2899
|
-
|
2900
|
-
|
2901
|
-
|
2902
|
-
|
2903
|
-
|
2904
|
-
|
2905
|
-
|
2906
|
-
|
2907
|
-
|
2908
|
-
|
2909
|
-
|
2910
|
-
|
2911
|
-
|
2912
|
-
|
2913
|
-
|
2914
|
-
|
3293
|
+
|
3294
|
+
|
3295
|
+
—
|
3296
|
+
<div class='inline'>
|
3297
|
+
<p>the merged Array and the unifications to be instantiated.</p>
|
3298
|
+
</div>
|
3299
|
+
|
3300
|
+
</li>
|
3301
|
+
|
3302
|
+
<li>
|
3303
|
+
|
3304
|
+
|
3305
|
+
<span class='type'>(<tt>nil</tt>)</span>
|
3306
|
+
|
3307
|
+
|
3308
|
+
|
3309
|
+
—
|
3310
|
+
<div class='inline'>
|
3311
|
+
<p>if the Arrays cannot be unified.</p>
|
3312
|
+
</div>
|
3313
|
+
|
3314
|
+
</li>
|
3315
|
+
|
3316
|
+
</ul>
|
3317
|
+
|
3318
|
+
</div><table class="source_code">
|
3319
|
+
<tr>
|
3320
|
+
<td>
|
3321
|
+
<pre class="lines">
|
3322
|
+
|
3323
|
+
|
3324
|
+
990
|
3325
|
+
991
|
3326
|
+
992
|
3327
|
+
993
|
3328
|
+
994
|
3329
|
+
995
|
3330
|
+
996
|
3331
|
+
997
|
3332
|
+
998
|
3333
|
+
999
|
3334
|
+
1000
|
3335
|
+
1001
|
3336
|
+
1002
|
3337
|
+
1003
|
3338
|
+
1004
|
3339
|
+
1005
|
3340
|
+
1006
|
3341
|
+
1007
|
3342
|
+
1008
|
3343
|
+
1009
|
3344
|
+
1010
|
3345
|
+
1011
|
3346
|
+
1012
|
3347
|
+
1013
|
3348
|
+
1014
|
3349
|
+
1015
|
3350
|
+
1016
|
3351
|
+
1017
|
3352
|
+
1018
|
3353
|
+
1019
|
3354
|
+
1020
|
3355
|
+
1021
|
3356
|
+
1022
|
3357
|
+
1023
|
3358
|
+
1024
|
3359
|
+
1025
|
3360
|
+
1026
|
3361
|
+
1027
|
3362
|
+
1028
|
3363
|
+
1029
|
3364
|
+
1030
|
3365
|
+
1031
|
3366
|
+
1032
|
3367
|
+
1033
|
3368
|
+
1034
|
3369
|
+
1035
|
3370
|
+
1036
|
3371
|
+
1037
|
3372
|
+
1038
|
3373
|
+
1039
|
3374
|
+
1040
|
3375
|
+
1041
|
3376
|
+
1042
|
3377
|
+
1043</pre>
|
2915
3378
|
</td>
|
2916
3379
|
<td>
|
2917
|
-
<pre class="code"><span class="info file"># File 'lib/porolog.rb', line
|
3380
|
+
<pre class="code"><span class="info file"># File 'lib/porolog.rb', line 990</span>
|
2918
3381
|
|
2919
3382
|
<span class='kw'>def</span> <span class='id identifier rubyid_unify_headtail_with_headtail'>unify_headtail_with_headtail</span><span class='lparen'>(</span><span class='id identifier rubyid_arrays'>arrays</span><span class='comma'>,</span> <span class='id identifier rubyid_arrays_goals'>arrays_goals</span><span class='comma'>,</span> <span class='id identifier rubyid_visited'>visited</span><span class='rparen'>)</span>
|
2920
3383
|
<span class='kw'>unless</span> <span class='id identifier rubyid_arrays'>arrays</span><span class='period'>.</span><span class='id identifier rubyid_all?'>all?</span><span class='lparen'>(</span><span class='op'>&</span><span class='symbol'>:headtail?</span><span class='rparen'>)</span>
|
@@ -3085,126 +3548,6 @@
|
|
3085
3548
|
<pre class="lines">
|
3086
3549
|
|
3087
3550
|
|
3088
|
-
670
|
3089
|
-
671
|
3090
|
-
672
|
3091
|
-
673
|
3092
|
-
674
|
3093
|
-
675
|
3094
|
-
676
|
3095
|
-
677
|
3096
|
-
678
|
3097
|
-
679
|
3098
|
-
680
|
3099
|
-
681
|
3100
|
-
682
|
3101
|
-
683
|
3102
|
-
684
|
3103
|
-
685
|
3104
|
-
686
|
3105
|
-
687
|
3106
|
-
688
|
3107
|
-
689
|
3108
|
-
690
|
3109
|
-
691
|
3110
|
-
692
|
3111
|
-
693
|
3112
|
-
694
|
3113
|
-
695
|
3114
|
-
696
|
3115
|
-
697
|
3116
|
-
698
|
3117
|
-
699
|
3118
|
-
700
|
3119
|
-
701
|
3120
|
-
702
|
3121
|
-
703
|
3122
|
-
704
|
3123
|
-
705
|
3124
|
-
706
|
3125
|
-
707
|
3126
|
-
708
|
3127
|
-
709
|
3128
|
-
710
|
3129
|
-
711
|
3130
|
-
712
|
3131
|
-
713
|
3132
|
-
714
|
3133
|
-
715
|
3134
|
-
716
|
3135
|
-
717
|
3136
|
-
718
|
3137
|
-
719
|
3138
|
-
720
|
3139
|
-
721
|
3140
|
-
722
|
3141
|
-
723
|
3142
|
-
724
|
3143
|
-
725
|
3144
|
-
726
|
3145
|
-
727
|
3146
|
-
728
|
3147
|
-
729
|
3148
|
-
730
|
3149
|
-
731
|
3150
|
-
732
|
3151
|
-
733
|
3152
|
-
734
|
3153
|
-
735
|
3154
|
-
736
|
3155
|
-
737
|
3156
|
-
738
|
3157
|
-
739
|
3158
|
-
740
|
3159
|
-
741
|
3160
|
-
742
|
3161
|
-
743
|
3162
|
-
744
|
3163
|
-
745
|
3164
|
-
746
|
3165
|
-
747
|
3166
|
-
748
|
3167
|
-
749
|
3168
|
-
750
|
3169
|
-
751
|
3170
|
-
752
|
3171
|
-
753
|
3172
|
-
754
|
3173
|
-
755
|
3174
|
-
756
|
3175
|
-
757
|
3176
|
-
758
|
3177
|
-
759
|
3178
|
-
760
|
3179
|
-
761
|
3180
|
-
762
|
3181
|
-
763
|
3182
|
-
764
|
3183
|
-
765
|
3184
|
-
766
|
3185
|
-
767
|
3186
|
-
768
|
3187
|
-
769
|
3188
|
-
770
|
3189
|
-
771
|
3190
|
-
772
|
3191
|
-
773
|
3192
|
-
774
|
3193
|
-
775
|
3194
|
-
776
|
3195
|
-
777
|
3196
|
-
778
|
3197
|
-
779
|
3198
|
-
780
|
3199
|
-
781
|
3200
|
-
782
|
3201
|
-
783
|
3202
|
-
784
|
3203
|
-
785
|
3204
|
-
786
|
3205
|
-
787
|
3206
|
-
788
|
3207
|
-
789
|
3208
3551
|
790
|
3209
3552
|
791
|
3210
3553
|
792
|
@@ -3273,10 +3616,134 @@
|
|
3273
3616
|
855
|
3274
3617
|
856
|
3275
3618
|
857
|
3276
|
-
858
|
3619
|
+
858
|
3620
|
+
859
|
3621
|
+
860
|
3622
|
+
861
|
3623
|
+
862
|
3624
|
+
863
|
3625
|
+
864
|
3626
|
+
865
|
3627
|
+
866
|
3628
|
+
867
|
3629
|
+
868
|
3630
|
+
869
|
3631
|
+
870
|
3632
|
+
871
|
3633
|
+
872
|
3634
|
+
873
|
3635
|
+
874
|
3636
|
+
875
|
3637
|
+
876
|
3638
|
+
877
|
3639
|
+
878
|
3640
|
+
879
|
3641
|
+
880
|
3642
|
+
881
|
3643
|
+
882
|
3644
|
+
883
|
3645
|
+
884
|
3646
|
+
885
|
3647
|
+
886
|
3648
|
+
887
|
3649
|
+
888
|
3650
|
+
889
|
3651
|
+
890
|
3652
|
+
891
|
3653
|
+
892
|
3654
|
+
893
|
3655
|
+
894
|
3656
|
+
895
|
3657
|
+
896
|
3658
|
+
897
|
3659
|
+
898
|
3660
|
+
899
|
3661
|
+
900
|
3662
|
+
901
|
3663
|
+
902
|
3664
|
+
903
|
3665
|
+
904
|
3666
|
+
905
|
3667
|
+
906
|
3668
|
+
907
|
3669
|
+
908
|
3670
|
+
909
|
3671
|
+
910
|
3672
|
+
911
|
3673
|
+
912
|
3674
|
+
913
|
3675
|
+
914
|
3676
|
+
915
|
3677
|
+
916
|
3678
|
+
917
|
3679
|
+
918
|
3680
|
+
919
|
3681
|
+
920
|
3682
|
+
921
|
3683
|
+
922
|
3684
|
+
923
|
3685
|
+
924
|
3686
|
+
925
|
3687
|
+
926
|
3688
|
+
927
|
3689
|
+
928
|
3690
|
+
929
|
3691
|
+
930
|
3692
|
+
931
|
3693
|
+
932
|
3694
|
+
933
|
3695
|
+
934
|
3696
|
+
935
|
3697
|
+
936
|
3698
|
+
937
|
3699
|
+
938
|
3700
|
+
939
|
3701
|
+
940
|
3702
|
+
941
|
3703
|
+
942
|
3704
|
+
943
|
3705
|
+
944
|
3706
|
+
945
|
3707
|
+
946
|
3708
|
+
947
|
3709
|
+
948
|
3710
|
+
949
|
3711
|
+
950
|
3712
|
+
951
|
3713
|
+
952
|
3714
|
+
953
|
3715
|
+
954
|
3716
|
+
955
|
3717
|
+
956
|
3718
|
+
957
|
3719
|
+
958
|
3720
|
+
959
|
3721
|
+
960
|
3722
|
+
961
|
3723
|
+
962
|
3724
|
+
963
|
3725
|
+
964
|
3726
|
+
965
|
3727
|
+
966
|
3728
|
+
967
|
3729
|
+
968
|
3730
|
+
969
|
3731
|
+
970
|
3732
|
+
971
|
3733
|
+
972
|
3734
|
+
973
|
3735
|
+
974
|
3736
|
+
975
|
3737
|
+
976
|
3738
|
+
977
|
3739
|
+
978
|
3740
|
+
979
|
3741
|
+
980
|
3742
|
+
981
|
3743
|
+
982</pre>
|
3277
3744
|
</td>
|
3278
3745
|
<td>
|
3279
|
-
<pre class="code"><span class="info file"># File 'lib/porolog.rb', line
|
3746
|
+
<pre class="code"><span class="info file"># File 'lib/porolog.rb', line 790</span>
|
3280
3747
|
|
3281
3748
|
<span class='kw'>def</span> <span class='id identifier rubyid_unify_headtail_with_tail'>unify_headtail_with_tail</span><span class='lparen'>(</span><span class='id identifier rubyid_arrays'>arrays</span><span class='comma'>,</span> <span class='id identifier rubyid_arrays_goals'>arrays_goals</span><span class='comma'>,</span> <span class='id identifier rubyid_visited'>visited</span><span class='rparen'>)</span>
|
3282
3749
|
<span class='comment'># -- Validate Arrays --
|
@@ -3293,19 +3760,23 @@
|
|
3293
3760
|
|
3294
3761
|
<span class='comment'># -- Variablise Arrays --
|
3295
3762
|
</span> <span class='id identifier rubyid_arrays'>arrays</span> <span class='op'>=</span> <span class='id identifier rubyid_arrays_goals'>arrays_goals</span><span class='period'>.</span><span class='id identifier rubyid_zip'>zip</span><span class='lparen'>(</span><span class='id identifier rubyid_arrays'>arrays</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_map'>map</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_goal'>goal</span><span class='comma'>,</span> <span class='id identifier rubyid_array'>array</span><span class='op'>|</span>
|
3296
|
-
<span class='
|
3763
|
+
<span class='kw'>if</span> <span class='id identifier rubyid_array'>array</span> <span class='op'>==</span> <span class='const'><span class='object_link'><a href="#UNKNOWN_ARRAY-constant" title="Porolog::UNKNOWN_ARRAY (constant)">UNKNOWN_ARRAY</a></span></span>
|
3764
|
+
<span class='id identifier rubyid_array'>array</span>
|
3765
|
+
<span class='kw'>else</span>
|
3766
|
+
<span class='id identifier rubyid_goal'>goal</span><span class='period'>.</span><span class='id identifier rubyid_variablise'>variablise</span><span class='lparen'>(</span><span class='id identifier rubyid_array'>array</span><span class='rparen'>)</span>
|
3767
|
+
<span class='kw'>end</span>
|
3297
3768
|
<span class='kw'>end</span>
|
3298
3769
|
|
3299
3770
|
<span class='comment'># -- Determine the fixed length (if any) --
|
3300
3771
|
</span> <span class='id identifier rubyid_fixed_length'>fixed_length</span> <span class='op'>=</span> <span class='kw'>nil</span>
|
3301
3772
|
<span class='id identifier rubyid_arrays'>arrays</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_array'>array</span><span class='op'>|</span>
|
3302
|
-
<span class='kw'>
|
3303
|
-
|
3304
|
-
|
3305
|
-
|
3306
|
-
|
3307
|
-
|
3308
|
-
<span class='kw'>
|
3773
|
+
<span class='kw'>next</span> <span class='kw'>if</span> <span class='id identifier rubyid_has_tail?'>has_tail?</span><span class='lparen'>(</span><span class='id identifier rubyid_array'>array</span><span class='rparen'>)</span>
|
3774
|
+
|
3775
|
+
<span class='id identifier rubyid_array_length'>array_length</span> <span class='op'>=</span> <span class='id identifier rubyid_array'>array</span><span class='period'>.</span><span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_size'>size</span>
|
3776
|
+
<span class='id identifier rubyid_fixed_length'>fixed_length</span> <span class='op'>||=</span> <span class='id identifier rubyid_array_length'>array_length</span>
|
3777
|
+
<span class='kw'>unless</span> <span class='id identifier rubyid_fixed_length'>fixed_length</span> <span class='op'>==</span> <span class='id identifier rubyid_array_length'>array_length</span>
|
3778
|
+
<span class='id identifier rubyid_array'>array</span><span class='period'>.</span><span class='id identifier rubyid_goal'>goal</span><span class='period'>.</span><span class='id identifier rubyid_log'>log</span> <span class='op'><<</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>Cannot unify </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_array'>array</span><span class='period'>.</span><span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_inspect'>inspect</span><span class='embexpr_end'>}</span><span class='tstring_content'> because it has a different length from </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_fixed_length'>fixed_length</span><span class='embexpr_end'>}</span><span class='tstring_end'>"</span></span>
|
3779
|
+
<span class='kw'>return</span> <span class='kw'>nil</span>
|
3309
3780
|
<span class='kw'>end</span>
|
3310
3781
|
<span class='kw'>end</span>
|
3311
3782
|
|
@@ -3314,7 +3785,7 @@
|
|
3314
3785
|
|
3315
3786
|
<span class='comment'># -- Unify All HeadTail Arrays --
|
3316
3787
|
</span> <span class='kw'>if</span> <span class='id identifier rubyid_headtail_arrays'>headtail_arrays</span><span class='period'>.</span><span class='id identifier rubyid_size'>size</span> <span class='op'>></span> <span class='int'>1</span>
|
3317
|
-
<span class='id identifier rubyid_headtail_goals'>headtail_goals</span> <span class='op'>=</span> <span class='id identifier rubyid_headtail_arrays'>headtail_arrays</span><span class='period'>.</span><span class='id identifier rubyid_map'>map</span><span class='
|
3788
|
+
<span class='id identifier rubyid_headtail_goals'>headtail_goals</span> <span class='op'>=</span> <span class='id identifier rubyid_headtail_arrays'>headtail_arrays</span><span class='period'>.</span><span class='id identifier rubyid_map'>map</span><span class='lparen'>(</span><span class='op'>&</span><span class='symbol'>:goal</span><span class='rparen'>)</span>
|
3318
3789
|
<span class='id identifier rubyid_merged_headtails'>merged_headtails</span><span class='comma'>,</span> <span class='id identifier rubyid_headtail_unifications'>headtail_unifications</span> <span class='op'>=</span> <span class='id identifier rubyid_unify_headtail_with_headtail'>unify_headtail_with_headtail</span><span class='lparen'>(</span><span class='id identifier rubyid_headtail_arrays'>headtail_arrays</span><span class='comma'>,</span> <span class='id identifier rubyid_headtail_goals'>headtail_goals</span><span class='comma'>,</span> <span class='id identifier rubyid_visited'>visited</span><span class='rparen'>)</span>
|
3319
3790
|
<span class='kw'>unless</span> <span class='id identifier rubyid_merged_headtails'>merged_headtails</span>
|
3320
3791
|
<span class='id identifier rubyid_msg'>msg</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>Could not unify headtail arrays: </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_headtail_arrays'>headtail_arrays</span><span class='period'>.</span><span class='id identifier rubyid_map'>map</span><span class='lparen'>(</span><span class='op'>&</span><span class='symbol'>:value</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_map'>map</span><span class='lparen'>(</span><span class='op'>&</span><span class='symbol'>:inspect</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_join'>join</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'> with </span><span class='tstring_end'>'</span></span><span class='rparen'>)</span><span class='embexpr_end'>}</span><span class='tstring_end'>"</span></span>
|
@@ -3335,7 +3806,7 @@
|
|
3335
3806
|
|
3336
3807
|
<span class='comment'># -- Unify All Tail Arrays --
|
3337
3808
|
</span> <span class='kw'>if</span> <span class='id identifier rubyid_tail_arrays'>tail_arrays</span><span class='period'>.</span><span class='id identifier rubyid_size'>size</span> <span class='op'>></span> <span class='int'>1</span>
|
3338
|
-
<span class='id identifier rubyid_tail_goals'>tail_goals</span> <span class='op'>=</span> <span class='id identifier rubyid_tail_arrays'>tail_arrays</span><span class='period'>.</span><span class='id identifier rubyid_map'>map</span><span class='
|
3809
|
+
<span class='id identifier rubyid_tail_goals'>tail_goals</span> <span class='op'>=</span> <span class='id identifier rubyid_tail_arrays'>tail_arrays</span><span class='period'>.</span><span class='id identifier rubyid_map'>map</span><span class='lparen'>(</span><span class='op'>&</span><span class='symbol'>:goal</span><span class='rparen'>)</span>
|
3339
3810
|
<span class='id identifier rubyid_merged_tails'>merged_tails</span><span class='comma'>,</span> <span class='id identifier rubyid_tail_unifications'>tail_unifications</span> <span class='op'>=</span> <span class='id identifier rubyid_unify_tail_with_tail'>unify_tail_with_tail</span><span class='lparen'>(</span><span class='id identifier rubyid_tail_arrays'>tail_arrays</span><span class='comma'>,</span> <span class='id identifier rubyid_tail_goals'>tail_goals</span><span class='comma'>,</span> <span class='id identifier rubyid_visited'>visited</span><span class='rparen'>)</span>
|
3340
3811
|
<span class='kw'>return</span> <span class='kw'>nil</span> <span class='kw'>unless</span> <span class='id identifier rubyid_merged_tails'>merged_tails</span>
|
3341
3812
|
<span class='id identifier rubyid_unifications'>unifications</span> <span class='op'>+=</span> <span class='id identifier rubyid_tail_unifications'>tail_unifications</span>
|
@@ -3423,7 +3894,7 @@
|
|
3423
3894
|
<span class='kw'>case</span> <span class='id identifier rubyid_element'>element</span><span class='period'>.</span><span class='id identifier rubyid_type'>type</span>
|
3424
3895
|
<span class='kw'>when</span> <span class='symbol'>:atomic</span>
|
3425
3896
|
<span class='int'>0</span>
|
3426
|
-
<span class='kw'>when</span> <span class='symbol'>:array</span>
|
3897
|
+
<span class='kw'>when</span> <span class='symbol'>:array</span><span class='comma'>,</span> <span class='symbol'>:tail</span>
|
3427
3898
|
<span class='kw'>if</span> <span class='lbracket'>[</span><span class='const'><span class='object_link'><a href="#UNKNOWN_TAIL-constant" title="Porolog::UNKNOWN_TAIL (constant)">UNKNOWN_TAIL</a></span></span><span class='comma'>,</span> <span class='const'><span class='object_link'><a href="#UNKNOWN_ARRAY-constant" title="Porolog::UNKNOWN_ARRAY (constant)">UNKNOWN_ARRAY</a></span></span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_include?'>include?</span><span class='lparen'>(</span><span class='id identifier rubyid_element'>element</span><span class='rparen'>)</span>
|
3428
3899
|
<span class='int'>3</span>
|
3429
3900
|
<span class='kw'>else</span>
|
@@ -3584,38 +4055,42 @@
|
|
3584
4055
|
<pre class="lines">
|
3585
4056
|
|
3586
4057
|
|
3587
|
-
|
3588
|
-
|
3589
|
-
|
3590
|
-
|
3591
|
-
|
3592
|
-
|
3593
|
-
|
3594
|
-
|
3595
|
-
|
3596
|
-
|
3597
|
-
|
3598
|
-
|
3599
|
-
|
3600
|
-
|
3601
|
-
|
3602
|
-
|
3603
|
-
|
3604
|
-
|
3605
|
-
|
3606
|
-
|
3607
|
-
|
3608
|
-
|
3609
|
-
|
3610
|
-
|
3611
|
-
|
3612
|
-
|
4058
|
+
420
|
4059
|
+
421
|
4060
|
+
422
|
4061
|
+
423
|
4062
|
+
424
|
4063
|
+
425
|
4064
|
+
426
|
4065
|
+
427
|
4066
|
+
428
|
4067
|
+
429
|
4068
|
+
430
|
4069
|
+
431
|
4070
|
+
432
|
4071
|
+
433
|
4072
|
+
434
|
4073
|
+
435
|
4074
|
+
436
|
4075
|
+
437
|
4076
|
+
438
|
4077
|
+
439
|
4078
|
+
440
|
4079
|
+
441
|
4080
|
+
442
|
4081
|
+
443
|
4082
|
+
444
|
4083
|
+
445
|
4084
|
+
446
|
4085
|
+
447</pre>
|
3613
4086
|
</td>
|
3614
4087
|
<td>
|
3615
|
-
<pre class="code"><span class="info file"># File 'lib/porolog.rb', line
|
4088
|
+
<pre class="code"><span class="info file"># File 'lib/porolog.rb', line 420</span>
|
3616
4089
|
|
3617
4090
|
<span class='kw'>def</span> <span class='id identifier rubyid_unify_many_arrays'>unify_many_arrays</span><span class='lparen'>(</span><span class='id identifier rubyid_arrays'>arrays</span><span class='comma'>,</span> <span class='id identifier rubyid_arrays_goals'>arrays_goals</span><span class='comma'>,</span> <span class='id identifier rubyid_visited'>visited</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='rbracket'>]</span><span class='rparen'>)</span>
|
3618
|
-
<span class='id identifier rubyid_arrays_values'>arrays_values</span> <span class='op'>=</span> <span class='id identifier rubyid_arrays'>arrays</span><span class='period'>.</span
|
4091
|
+
<span class='id identifier rubyid_arrays_values'>arrays_values</span> <span class='op'>=</span> <span class='id identifier rubyid_arrays'>arrays</span><span class='period'>.</span>
|
4092
|
+
<span class='id identifier rubyid_map'>map</span><span class='lbrace'>{</span><span class='op'>|</span><span class='id identifier rubyid_array'>array</span><span class='op'>|</span> <span class='id identifier rubyid_expand_splat'>expand_splat</span><span class='lparen'>(</span><span class='id identifier rubyid_array'>array</span><span class='rparen'>)</span> <span class='rbrace'>}</span><span class='period'>.</span>
|
4093
|
+
<span class='id identifier rubyid_map'>map</span><span class='lbrace'>{</span><span class='op'>|</span><span class='id identifier rubyid_array'>array</span><span class='op'>|</span> <span class='id identifier rubyid_array'>array</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'><span class='object_link'><a href="Array.html" title="Array (class)">Array</a></span></span><span class='rparen'>)</span> <span class='op'>?</span> <span class='id identifier rubyid_array'>array</span><span class='period'>.</span><span class='id identifier rubyid_map'>map</span><span class='lparen'>(</span><span class='op'>&</span><span class='symbol'>:value</span><span class='rparen'>)</span> <span class='op'>:</span> <span class='id identifier rubyid_array'>array</span><span class='period'>.</span><span class='id identifier rubyid_value'>value</span> <span class='rbrace'>}</span>
|
3619
4094
|
|
3620
4095
|
<span class='kw'>unless</span> <span class='id identifier rubyid_arrays_values'>arrays_values</span><span class='period'>.</span><span class='id identifier rubyid_all?'>all?</span><span class='lbrace'>{</span><span class='op'>|</span><span class='id identifier rubyid_array_values'>array_values</span><span class='op'>|</span> <span class='lbracket'>[</span><span class='symbol'>:array</span><span class='comma'>,</span><span class='symbol'>:variable</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_include?'>include?</span><span class='lparen'>(</span><span class='id identifier rubyid_array_values'>array_values</span><span class='period'>.</span><span class='id identifier rubyid_type'>type</span><span class='rparen'>)</span> <span class='rbrace'>}</span>
|
3621
4096
|
<span class='id identifier rubyid_msg'>msg</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>Cannot unify: </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_arrays'>arrays</span><span class='period'>.</span><span class='id identifier rubyid_map'>map</span><span class='lparen'>(</span><span class='op'>&</span><span class='symbol'>:inspect</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_join'>join</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'> with </span><span class='tstring_end'>'</span></span><span class='rparen'>)</span><span class='embexpr_end'>}</span><span class='tstring_end'>"</span></span>
|
@@ -3623,7 +4098,7 @@
|
|
3623
4098
|
<span class='kw'>return</span> <span class='kw'>nil</span>
|
3624
4099
|
<span class='kw'>end</span>
|
3625
4100
|
|
3626
|
-
<span class='comment'># TODO: Fix
|
4101
|
+
<span class='comment'># TODO: Fix / improve
|
3627
4102
|
</span> <span class='kw'>if</span> <span class='id identifier rubyid_arrays_values'>arrays_values</span><span class='period'>.</span><span class='id identifier rubyid_size'>size</span> <span class='op'>==</span> <span class='int'>2</span> <span class='op'>&&</span> <span class='id identifier rubyid_arrays_values'>arrays_values</span><span class='period'>.</span><span class='id identifier rubyid_any?'>any?</span><span class='lbrace'>{</span><span class='op'>|</span><span class='id identifier rubyid_array'>array</span><span class='op'>|</span> <span class='id identifier rubyid_array'>array</span> <span class='op'>==</span> <span class='const'><span class='object_link'><a href="#UNKNOWN_ARRAY-constant" title="Porolog::UNKNOWN_ARRAY (constant)">UNKNOWN_ARRAY</a></span></span> <span class='rbrace'>}</span>
|
3628
4103
|
<span class='id identifier rubyid_merged'>merged</span> <span class='op'>=</span> <span class='id identifier rubyid_arrays_values'>arrays_values</span><span class='period'>.</span><span class='id identifier rubyid_reject'>reject</span><span class='lbrace'>{</span><span class='op'>|</span><span class='id identifier rubyid_array'>array</span><span class='op'>|</span> <span class='id identifier rubyid_array'>array</span> <span class='op'>==</span> <span class='const'><span class='object_link'><a href="#UNKNOWN_ARRAY-constant" title="Porolog::UNKNOWN_ARRAY (constant)">UNKNOWN_ARRAY</a></span></span> <span class='rbrace'>}</span><span class='period'>.</span><span class='id identifier rubyid_first'>first</span>
|
3629
4104
|
<span class='kw'>return</span> <span class='lbracket'>[</span><span class='id identifier rubyid_merged'>merged</span><span class='comma'>,</span><span class='lbracket'>[</span><span class='rbracket'>]</span><span class='rbracket'>]</span>
|
@@ -3632,7 +4107,7 @@
|
|
3632
4107
|
<span class='id identifier rubyid_number_of_arrays'>number_of_arrays</span> <span class='op'>=</span> <span class='id identifier rubyid_arrays'>arrays</span><span class='period'>.</span><span class='id identifier rubyid_size'>size</span>
|
3633
4108
|
<span class='id identifier rubyid_number_of_tails'>number_of_tails</span> <span class='op'>=</span> <span class='id identifier rubyid_arrays'>arrays</span><span class='period'>.</span><span class='id identifier rubyid_count'>count</span><span class='lbrace'>{</span><span class='op'>|</span><span class='id identifier rubyid_array'>array</span><span class='op'>|</span> <span class='id identifier rubyid_has_tail?'>has_tail?</span><span class='lparen'>(</span><span class='id identifier rubyid_array'>array</span><span class='rparen'>)</span> <span class='rbrace'>}</span>
|
3634
4109
|
|
3635
|
-
<span class='kw'>if</span> <span class='id identifier rubyid_number_of_tails'>number_of_tails</span
|
4110
|
+
<span class='kw'>if</span> <span class='id identifier rubyid_number_of_tails'>number_of_tails</span><span class='period'>.</span><span class='id identifier rubyid_zero?'>zero?</span>
|
3636
4111
|
<span class='id identifier rubyid_unify_arrays_with_no_tails'>unify_arrays_with_no_tails</span><span class='lparen'>(</span><span class='id identifier rubyid_arrays'>arrays</span><span class='comma'>,</span> <span class='id identifier rubyid_arrays_goals'>arrays_goals</span><span class='comma'>,</span> <span class='id identifier rubyid_visited'>visited</span><span class='rparen'>)</span>
|
3637
4112
|
<span class='kw'>elsif</span> <span class='id identifier rubyid_number_of_tails'>number_of_tails</span> <span class='op'>==</span> <span class='id identifier rubyid_number_of_arrays'>number_of_arrays</span>
|
3638
4113
|
<span class='id identifier rubyid_unify_arrays_with_all_tails'>unify_arrays_with_all_tails</span><span class='lparen'>(</span><span class='id identifier rubyid_arrays'>arrays</span><span class='comma'>,</span> <span class='id identifier rubyid_arrays_goals'>arrays_goals</span><span class='comma'>,</span> <span class='id identifier rubyid_visited'>visited</span><span class='rparen'>)</span>
|
@@ -3755,92 +4230,90 @@
|
|
3755
4230
|
<pre class="lines">
|
3756
4231
|
|
3757
4232
|
|
3758
|
-
|
3759
|
-
|
3760
|
-
|
3761
|
-
|
3762
|
-
|
3763
|
-
|
3764
|
-
|
3765
|
-
|
3766
|
-
|
3767
|
-
|
3768
|
-
|
3769
|
-
|
3770
|
-
|
3771
|
-
|
3772
|
-
|
3773
|
-
|
3774
|
-
|
3775
|
-
|
3776
|
-
|
3777
|
-
|
3778
|
-
|
3779
|
-
|
3780
|
-
|
3781
|
-
|
3782
|
-
|
3783
|
-
|
3784
|
-
|
3785
|
-
|
3786
|
-
|
3787
|
-
|
3788
|
-
|
3789
|
-
|
3790
|
-
|
3791
|
-
|
3792
|
-
|
3793
|
-
|
3794
|
-
|
3795
|
-
|
3796
|
-
|
3797
|
-
|
3798
|
-
|
3799
|
-
|
3800
|
-
|
3801
|
-
|
3802
|
-
|
3803
|
-
|
3804
|
-
|
3805
|
-
|
3806
|
-
|
3807
|
-
|
3808
|
-
|
3809
|
-
|
3810
|
-
|
3811
|
-
|
3812
|
-
|
3813
|
-
|
3814
|
-
|
3815
|
-
|
3816
|
-
|
3817
|
-
|
3818
|
-
|
3819
|
-
|
3820
|
-
|
3821
|
-
|
3822
|
-
|
3823
|
-
|
3824
|
-
|
3825
|
-
|
3826
|
-
|
3827
|
-
|
3828
|
-
|
3829
|
-
|
3830
|
-
|
3831
|
-
|
3832
|
-
|
3833
|
-
|
3834
|
-
|
3835
|
-
|
3836
|
-
|
3837
|
-
|
3838
|
-
|
3839
|
-
661
|
3840
|
-
662</pre>
|
4233
|
+
702
|
4234
|
+
703
|
4235
|
+
704
|
4236
|
+
705
|
4237
|
+
706
|
4238
|
+
707
|
4239
|
+
708
|
4240
|
+
709
|
4241
|
+
710
|
4242
|
+
711
|
4243
|
+
712
|
4244
|
+
713
|
4245
|
+
714
|
4246
|
+
715
|
4247
|
+
716
|
4248
|
+
717
|
4249
|
+
718
|
4250
|
+
719
|
4251
|
+
720
|
4252
|
+
721
|
4253
|
+
722
|
4254
|
+
723
|
4255
|
+
724
|
4256
|
+
725
|
4257
|
+
726
|
4258
|
+
727
|
4259
|
+
728
|
4260
|
+
729
|
4261
|
+
730
|
4262
|
+
731
|
4263
|
+
732
|
4264
|
+
733
|
4265
|
+
734
|
4266
|
+
735
|
4267
|
+
736
|
4268
|
+
737
|
4269
|
+
738
|
4270
|
+
739
|
4271
|
+
740
|
4272
|
+
741
|
4273
|
+
742
|
4274
|
+
743
|
4275
|
+
744
|
4276
|
+
745
|
4277
|
+
746
|
4278
|
+
747
|
4279
|
+
748
|
4280
|
+
749
|
4281
|
+
750
|
4282
|
+
751
|
4283
|
+
752
|
4284
|
+
753
|
4285
|
+
754
|
4286
|
+
755
|
4287
|
+
756
|
4288
|
+
757
|
4289
|
+
758
|
4290
|
+
759
|
4291
|
+
760
|
4292
|
+
761
|
4293
|
+
762
|
4294
|
+
763
|
4295
|
+
764
|
4296
|
+
765
|
4297
|
+
766
|
4298
|
+
767
|
4299
|
+
768
|
4300
|
+
769
|
4301
|
+
770
|
4302
|
+
771
|
4303
|
+
772
|
4304
|
+
773
|
4305
|
+
774
|
4306
|
+
775
|
4307
|
+
776
|
4308
|
+
777
|
4309
|
+
778
|
4310
|
+
779
|
4311
|
+
780
|
4312
|
+
781
|
4313
|
+
782</pre>
|
3841
4314
|
</td>
|
3842
4315
|
<td>
|
3843
|
-
<pre class="code"><span class="info file"># File 'lib/porolog.rb', line
|
4316
|
+
<pre class="code"><span class="info file"># File 'lib/porolog.rb', line 702</span>
|
3844
4317
|
|
3845
4318
|
<span class='kw'>def</span> <span class='id identifier rubyid_unify_tail_with_tail'>unify_tail_with_tail</span><span class='lparen'>(</span><span class='id identifier rubyid_arrays'>arrays</span><span class='comma'>,</span> <span class='id identifier rubyid_arrays_goals'>arrays_goals</span><span class='comma'>,</span> <span class='id identifier rubyid_visited'>visited</span><span class='rparen'>)</span>
|
3846
4319
|
<span class='comment'># -- Validate Arrays --
|
@@ -3880,10 +4353,8 @@
|
|
3880
4353
|
<span class='id identifier rubyid_first_goal'>first_goal</span> <span class='op'>=</span> <span class='id identifier rubyid_pair'>pair</span><span class='period'>.</span><span class='id identifier rubyid_first'>first</span><span class='period'>.</span><span class='id identifier rubyid_goal'>goal</span> <span class='kw'>if</span> <span class='id identifier rubyid_pair'>pair</span><span class='period'>.</span><span class='id identifier rubyid_first'>first</span><span class='period'>.</span><span class='id identifier rubyid_respond_to?'>respond_to?</span><span class='lparen'>(</span><span class='symbol'>:goal</span><span class='rparen'>)</span>
|
3881
4354
|
<span class='id identifier rubyid_last_goal'>last_goal</span> <span class='op'>=</span> <span class='id identifier rubyid_pair'>pair</span><span class='period'>.</span><span class='id identifier rubyid_last'>last</span><span class='period'>.</span><span class='id identifier rubyid_goal'>goal</span> <span class='kw'>if</span> <span class='id identifier rubyid_pair'>pair</span><span class='period'>.</span><span class='id identifier rubyid_last'>last</span><span class='period'>.</span><span class='id identifier rubyid_respond_to?'>respond_to?</span><span class='lparen'>(</span><span class='symbol'>:goal</span><span class='rparen'>)</span>
|
3882
4355
|
<span class='id identifier rubyid_m'>m</span><span class='comma'>,</span><span class='id identifier rubyid_u'>u</span> <span class='op'>=</span> <span class='id identifier rubyid_unify_arrays'>unify_arrays</span><span class='lparen'>(</span><span class='id identifier rubyid_first_goal'>first_goal</span><span class='period'>.</span><span class='id identifier rubyid_variablise'>variablise</span><span class='lparen'>(</span><span class='lbracket'>[</span><span class='id identifier rubyid_pair'>pair</span><span class='period'>.</span><span class='id identifier rubyid_first'>first</span><span class='rbracket'>]</span><span class='rparen'>)</span><span class='comma'>,</span> <span class='id identifier rubyid_last_goal'>last_goal</span><span class='period'>.</span><span class='id identifier rubyid_variablise'>variablise</span><span class='lparen'>(</span><span class='lbracket'>[</span><span class='id identifier rubyid_pair'>pair</span><span class='period'>.</span><span class='id identifier rubyid_last'>last</span><span class='rbracket'>]</span><span class='rparen'>)</span><span class='comma'>,</span> <span class='id identifier rubyid_first_goal'>first_goal</span><span class='comma'>,</span> <span class='id identifier rubyid_last_goal'>last_goal</span><span class='comma'>,</span> <span class='id identifier rubyid_visited'>visited</span><span class='rparen'>)</span>
|
3883
|
-
<span class='kw'>unless</span> <span class='id identifier rubyid_m'>m</span>
|
3884
|
-
|
3885
|
-
<span class='kw'>end</span>
|
3886
|
-
<span class='id identifier rubyid_m'>m</span><span class='lbracket'>[</span><span class='op'>-</span><span class='int'>1</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="#UNKNOWN_TAIL-constant" title="Porolog::UNKNOWN_TAIL (constant)">UNKNOWN_TAIL</a></span></span> <span class='kw'>if</span> <span class='id identifier rubyid_m'>m</span><span class='lbracket'>[</span><span class='op'>-</span><span class='int'>1</span><span class='rbracket'>]</span> <span class='op'>==</span> <span class='kw'>nil</span>
|
4356
|
+
<span class='kw'>return</span> <span class='kw'>nil</span> <span class='kw'>unless</span> <span class='id identifier rubyid_m'>m</span>
|
4357
|
+
<span class='id identifier rubyid_m'>m</span><span class='lbracket'>[</span><span class='op'>-</span><span class='int'>1</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="#UNKNOWN_TAIL-constant" title="Porolog::UNKNOWN_TAIL (constant)">UNKNOWN_TAIL</a></span></span> <span class='kw'>if</span> <span class='id identifier rubyid_m'>m</span><span class='lbracket'>[</span><span class='op'>-</span><span class='int'>1</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span>
|
3887
4358
|
<span class='id identifier rubyid_merged_tails'>merged_tails</span> <span class='op'>+=</span> <span class='id identifier rubyid_m'>m</span>
|
3888
4359
|
<span class='id identifier rubyid_unifications'>unifications</span> <span class='op'>+=</span> <span class='id identifier rubyid_u'>u</span>
|
3889
4360
|
<span class='kw'>end</span>
|
@@ -3935,7 +4406,7 @@
|
|
3935
4406
|
</div>
|
3936
4407
|
|
3937
4408
|
<div id="footer">
|
3938
|
-
Generated on
|
4409
|
+
Generated on Sun Aug 2 19:24:16 2020 by
|
3939
4410
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
3940
4411
|
0.9.19 (ruby-2.6.5).
|
3941
4412
|
</div>
|