porolog 1.0.0 → 1.0.1
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 +101 -13
- data/coverage/index.html +63 -63
- data/doc/Array.html +1 -1
- data/doc/Object.html +1 -1
- data/doc/Porolog.html +3 -3
- data/doc/Symbol.html +1 -1
- data/doc/_index.html +1 -1
- data/doc/file.README.html +106 -15
- data/doc/index.html +106 -15
- data/doc/method_list.html +2 -2
- data/doc/top-level-namespace.html +1 -1
- data/lib/porolog.rb +2 -2
- data/lib/porolog/arguments.rb +2 -2
- data/lib/porolog/rule.rb +5 -5
- data/test/porolog/arguments_test.rb +8 -8
- data/test/porolog/goal_test.rb +2 -2
- data/test/porolog/predicate/builtin_test.rb +6 -6
- data/test/porolog/predicate_test.rb +2 -2
- data/test/samples_test.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8dc5fd364c17d1e71e8bcfe0a999f38814acf7435af6d479825c02de9a549d68
|
4
|
+
data.tar.gz: 0622422f07dcd49faf16b3e91ecae63fd76ed32cf7c15beb337fd2a4fb127c97
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4339f072ce58ac3b2afe74fb93bf3cc629b2f3677984fd643f2999e1a7b90b1e540efeb1f3f61b0103e722d6ad8cbe3717eec7fdf3ec60647b1c69752d2e816c
|
7
|
+
data.tar.gz: c2fd162e0d3ea14fe60ff411e51ae990e0e07c79784fa16dc28f14747fe2e6c7558b73cbb369a92a98882a354b22d6b06545ed7d3701a040e164aa975fd84f90
|
data/README.md
CHANGED
@@ -47,7 +47,7 @@ The main purpose of Porolog though is to add declarative logic programming to Ru
|
|
47
47
|
allow hybrid programming, in the same way that Ruby allows hybrid programming in the
|
48
48
|
functional programming paradigm.
|
49
49
|
|
50
|
-
This then Ruby programs to be written spanning all the major programming paradigms:
|
50
|
+
This then enables Ruby programs to be written spanning all the major programming paradigms:
|
51
51
|
- Imperative
|
52
52
|
- Functional
|
53
53
|
- Object Oriented
|
@@ -56,7 +56,7 @@ This then Ruby programs to be written spanning all the major programming paradig
|
|
56
56
|
### Basic Usage
|
57
57
|
|
58
58
|
Using `porolog` involves creating logic from facts and rules.
|
59
|
-
An example
|
59
|
+
An example of the most basic usage, using just facts.
|
60
60
|
|
61
61
|
```ruby
|
62
62
|
require 'porolog'
|
@@ -87,7 +87,7 @@ include Porolog
|
|
87
87
|
class Numbers
|
88
88
|
|
89
89
|
Predicate.scope self
|
90
|
-
predicate :prime
|
90
|
+
predicate :prime, class_base: self
|
91
91
|
|
92
92
|
prime(2).fact!
|
93
93
|
prime(3).fact!
|
@@ -120,6 +120,7 @@ A Predicate represents a Prolog predicate. They form the basis for rules and qu
|
|
120
120
|
|
121
121
|
The Scope class enables you to have multiple logic programs embedded in the same
|
122
122
|
Ruby program. A Scope object defines a scope for the predicates of a logic programme.
|
123
|
+
This allows you to have different predicates with the same name.
|
123
124
|
|
124
125
|
```ruby
|
125
126
|
require 'porolog'
|
@@ -142,14 +143,9 @@ prime.('pump C').fact!
|
|
142
143
|
prime.('pump D').fact!
|
143
144
|
|
144
145
|
# -- Assertions --
|
145
|
-
assert_equal
|
146
|
-
|
147
|
-
|
148
|
-
assert_scope Porolog::Scope[:numbers], :first, [prime1]
|
149
|
-
assert_scope Porolog::Scope[:pumps], :second, [prime2]
|
150
|
-
|
151
|
-
assert_equal :prime, prime1.name
|
152
|
-
assert_equal :prime, prime2.name
|
146
|
+
assert_equal [:default,:numbers,:pumps], Scope.scopes
|
147
|
+
assert_equal :prime, prime1.name
|
148
|
+
assert_equal :prime, prime2.name
|
153
149
|
|
154
150
|
solutions = [
|
155
151
|
{ X: 2 },
|
@@ -158,7 +154,7 @@ solutions = [
|
|
158
154
|
{ X: 7 },
|
159
155
|
{ X: 11 },
|
160
156
|
]
|
161
|
-
assert_equal
|
157
|
+
assert_equal solutions, prime1.(:X).solve
|
162
158
|
|
163
159
|
solutions = [
|
164
160
|
{ X: 'pump A' },
|
@@ -166,9 +162,101 @@ solutions = [
|
|
166
162
|
{ X: 'pump C' },
|
167
163
|
{ X: 'pump D' },
|
168
164
|
]
|
169
|
-
assert_equal
|
165
|
+
assert_equal solutions, prime2.(:X).solve
|
166
|
+
```
|
167
|
+
|
168
|
+
### A Complete Example
|
169
|
+
|
170
|
+
This example shows:
|
171
|
+
|
172
|
+
* how to define facts,
|
173
|
+
* how to define rules,
|
174
|
+
* how to encapsulate predicates within a class,
|
175
|
+
* how to specify a cut,
|
176
|
+
* how to use builtin predicates, and
|
177
|
+
* how to initiate queries.
|
178
|
+
|
179
|
+
```ruby
|
180
|
+
require 'porolog'
|
181
|
+
|
182
|
+
include Porolog
|
183
|
+
|
184
|
+
class Numbers
|
185
|
+
|
186
|
+
Predicate.scope self
|
187
|
+
builtin :gtr, :is, :noteq, :between, class_base: self
|
188
|
+
predicate :prime, :search_prime, class_base: self
|
189
|
+
|
190
|
+
prime(2).fact!
|
191
|
+
prime(3).fact!
|
192
|
+
prime(:X) << [
|
193
|
+
between(:X, 4, 100),
|
194
|
+
is(:X_mod_2, :X) {|x| x % 2 },
|
195
|
+
noteq(:X_mod_2, 0),
|
196
|
+
:CUT,
|
197
|
+
search_prime(:X, 3),
|
198
|
+
]
|
199
|
+
|
200
|
+
search_prime(:X, :N) << [
|
201
|
+
is(:N_squared, :N) {|n| n ** 2 },
|
202
|
+
gtr(:N_squared, :X),
|
203
|
+
:CUT
|
204
|
+
]
|
205
|
+
|
206
|
+
search_prime(:X, :N) << [
|
207
|
+
is(:X_mod_N, :X, :N) {|x,n| x % n },
|
208
|
+
noteq(:X_mod_N, 0),
|
209
|
+
is(:M, :N) {|n| n + 2 },
|
210
|
+
:CUT,
|
211
|
+
search_prime(:X, :M),
|
212
|
+
]
|
213
|
+
|
214
|
+
def show_primes
|
215
|
+
solutions = prime(:X).solve
|
216
|
+
|
217
|
+
solutions.each do |solution|
|
218
|
+
puts "#{solution[:X]} is prime"
|
219
|
+
end
|
220
|
+
end
|
221
|
+
|
222
|
+
def primes
|
223
|
+
Numbers.prime(:X).solve_for(:X)
|
224
|
+
end
|
225
|
+
|
226
|
+
def self.kind(number)
|
227
|
+
prime(number).valid? ? 'prime' : 'not prime'
|
228
|
+
end
|
229
|
+
|
230
|
+
def initialize(number)
|
231
|
+
@number = number
|
232
|
+
end
|
233
|
+
|
234
|
+
def kind
|
235
|
+
prime(@number).valid? ? :prime : :not_prime
|
236
|
+
end
|
237
|
+
|
238
|
+
end
|
239
|
+
|
240
|
+
|
241
|
+
numbers = Numbers.new 23
|
242
|
+
numbers.show_primes
|
243
|
+
puts numbers.primes.inspect
|
244
|
+
|
245
|
+
puts Numbers.prime(3).valid?.inspect
|
246
|
+
|
247
|
+
puts ARGV.inspect
|
248
|
+
ARGV.map(&:to_i).each do |arg|
|
249
|
+
puts "#{arg.inspect} is #{Numbers.kind(arg)}"
|
250
|
+
number = Numbers.new arg
|
251
|
+
puts number.kind.inspect
|
252
|
+
end
|
170
253
|
```
|
171
254
|
|
255
|
+
### Porolog Wiki
|
256
|
+
|
257
|
+
See the Wiki for further details.
|
258
|
+
https://github.com/wizardofosmium/porolog/wiki
|
259
|
+
|
172
260
|
## Testing
|
173
261
|
|
174
262
|
```bash
|
data/coverage/index.html
CHANGED
@@ -14,7 +14,7 @@
|
|
14
14
|
<img src="./assets/0.10.2/loading.gif" alt="loading"/>
|
15
15
|
</div>
|
16
16
|
<div id="wrapper" style="display:none;">
|
17
|
-
<div class="timestamp">Generated <abbr class="timeago" title="2020-08-
|
17
|
+
<div class="timestamp">Generated <abbr class="timeago" title="2020-08-06T22:13:52+10:00">2020-08-06T22:13:52+10:00</abbr></div>
|
18
18
|
<ul class="group_tabs"></ul>
|
19
19
|
|
20
20
|
<div id="content">
|
@@ -25,7 +25,7 @@
|
|
25
25
|
covered at
|
26
26
|
<span class="covered_strength">
|
27
27
|
<span class="green">
|
28
|
-
|
28
|
+
17764.4
|
29
29
|
</span>
|
30
30
|
</span> hits/line)
|
31
31
|
</h2>
|
@@ -97,7 +97,7 @@
|
|
97
97
|
<td>146</td>
|
98
98
|
<td>146</td>
|
99
99
|
<td>0</td>
|
100
|
-
<td>
|
100
|
+
<td>14712.7</td>
|
101
101
|
</tr>
|
102
102
|
|
103
103
|
<tr>
|
@@ -107,7 +107,7 @@
|
|
107
107
|
<td>146</td>
|
108
108
|
<td>146</td>
|
109
109
|
<td>0</td>
|
110
|
-
<td>159315.
|
110
|
+
<td>159315.7</td>
|
111
111
|
</tr>
|
112
112
|
|
113
113
|
<tr>
|
@@ -177,7 +177,7 @@
|
|
177
177
|
<td>129</td>
|
178
178
|
<td>129</td>
|
179
179
|
<td>0</td>
|
180
|
-
<td>450212.
|
180
|
+
<td>450212.4</td>
|
181
181
|
</tr>
|
182
182
|
|
183
183
|
<tr>
|
@@ -411,7 +411,7 @@
|
|
411
411
|
<li class="covered" data-hits="1" data-linenumber="14">
|
412
412
|
<span class="hits">1</span>
|
413
413
|
|
414
|
-
<code class="ruby"> VERSION = '1.0.
|
414
|
+
<code class="ruby"> VERSION = '1.0.1'.freeze</code>
|
415
415
|
</li>
|
416
416
|
|
417
417
|
<li class="never" data-hits="" data-linenumber="15">
|
@@ -423,7 +423,7 @@
|
|
423
423
|
<li class="covered" data-hits="1" data-linenumber="16">
|
424
424
|
<span class="hits">1</span>
|
425
425
|
|
426
|
-
<code class="ruby"> VERSION_DATE = '2020-08-
|
426
|
+
<code class="ruby"> VERSION_DATE = '2020-08-06'.freeze</code>
|
427
427
|
</li>
|
428
428
|
|
429
429
|
<li class="never" data-hits="" data-linenumber="17">
|
@@ -7870,7 +7870,7 @@
|
|
7870
7870
|
<li class="covered" data-hits="1" data-linenumber="71">
|
7871
7871
|
<span class="hits">1</span>
|
7872
7872
|
|
7873
|
-
<code class="ruby"> def
|
7873
|
+
<code class="ruby"> def fallacy!</code>
|
7874
7874
|
</li>
|
7875
7875
|
|
7876
7876
|
<li class="covered" data-hits="4" data-linenumber="72">
|
@@ -7954,7 +7954,7 @@
|
|
7954
7954
|
<li class="covered" data-hits="1" data-linenumber="85">
|
7955
7955
|
<span class="hits">1</span>
|
7956
7956
|
|
7957
|
-
<code class="ruby"> def
|
7957
|
+
<code class="ruby"> def cut_fallacy!</code>
|
7958
7958
|
</li>
|
7959
7959
|
|
7960
7960
|
<li class="covered" data-hits="2" data-linenumber="86">
|
@@ -10570,14 +10570,14 @@
|
|
10570
10570
|
<code class="ruby"> def deleted?</code>
|
10571
10571
|
</li>
|
10572
10572
|
|
10573
|
-
<li class="covered" data-hits="
|
10574
|
-
<span class="hits">
|
10573
|
+
<li class="covered" data-hits="7414" data-linenumber="125">
|
10574
|
+
<span class="hits">7414</span>
|
10575
10575
|
|
10576
10576
|
<code class="ruby"> @deleted ||= check_deleted</code>
|
10577
10577
|
</li>
|
10578
10578
|
|
10579
|
-
<li class="covered" data-hits="
|
10580
|
-
<span class="hits">
|
10579
|
+
<li class="covered" data-hits="7414" data-linenumber="126">
|
10580
|
+
<span class="hits">7414</span>
|
10581
10581
|
|
10582
10582
|
<code class="ruby"> @deleted</code>
|
10583
10583
|
</li>
|
@@ -10612,8 +10612,8 @@
|
|
10612
10612
|
<code class="ruby"> def check_deleted</code>
|
10613
10613
|
</li>
|
10614
10614
|
|
10615
|
-
<li class="covered" data-hits="
|
10616
|
-
<span class="hits">
|
10615
|
+
<li class="covered" data-hits="7406" data-linenumber="132">
|
10616
|
+
<span class="hits">7406</span>
|
10617
10617
|
|
10618
10618
|
<code class="ruby"> return false if @@goals.include?(self)</code>
|
10619
10619
|
</li>
|
@@ -10624,20 +10624,20 @@
|
|
10624
10624
|
<code class="ruby"> </code>
|
10625
10625
|
</li>
|
10626
10626
|
|
10627
|
-
<li class="covered" data-hits="
|
10628
|
-
<span class="hits">
|
10627
|
+
<li class="covered" data-hits="7391" data-linenumber="134">
|
10628
|
+
<span class="hits">7391</span>
|
10629
10629
|
|
10630
10630
|
<code class="ruby"> @variables.delete_if do |_name,variable|</code>
|
10631
10631
|
</li>
|
10632
10632
|
|
10633
|
-
<li class="covered" data-hits="
|
10634
|
-
<span class="hits">
|
10633
|
+
<li class="covered" data-hits="31379" data-linenumber="135">
|
10634
|
+
<span class="hits">31379</span>
|
10635
10635
|
|
10636
10636
|
<code class="ruby"> variable.remove</code>
|
10637
10637
|
</li>
|
10638
10638
|
|
10639
|
-
<li class="covered" data-hits="
|
10640
|
-
<span class="hits">
|
10639
|
+
<li class="covered" data-hits="31379" data-linenumber="136">
|
10640
|
+
<span class="hits">31379</span>
|
10641
10641
|
|
10642
10642
|
<code class="ruby"> true</code>
|
10643
10643
|
</li>
|
@@ -10654,8 +10654,8 @@
|
|
10654
10654
|
<code class="ruby"> </code>
|
10655
10655
|
</li>
|
10656
10656
|
|
10657
|
-
<li class="covered" data-hits="
|
10658
|
-
<span class="hits">
|
10657
|
+
<li class="covered" data-hits="7391" data-linenumber="139">
|
10658
|
+
<span class="hits">7391</span>
|
10659
10659
|
|
10660
10660
|
<code class="ruby"> @values.delete_if do |_name,value|</code>
|
10661
10661
|
</li>
|
@@ -10684,8 +10684,8 @@
|
|
10684
10684
|
<code class="ruby"> </code>
|
10685
10685
|
</li>
|
10686
10686
|
|
10687
|
-
<li class="covered" data-hits="
|
10688
|
-
<span class="hits">
|
10687
|
+
<li class="covered" data-hits="7391" data-linenumber="144">
|
10688
|
+
<span class="hits">7391</span>
|
10689
10689
|
|
10690
10690
|
<code class="ruby"> true</code>
|
10691
10691
|
</li>
|
@@ -10774,8 +10774,8 @@
|
|
10774
10774
|
<code class="ruby"> def terminated?</code>
|
10775
10775
|
</li>
|
10776
10776
|
|
10777
|
-
<li class="covered" data-hits="
|
10778
|
-
<span class="hits">
|
10777
|
+
<li class="covered" data-hits="7402" data-linenumber="159">
|
10778
|
+
<span class="hits">7402</span>
|
10779
10779
|
|
10780
10780
|
<code class="ruby"> @terminate</code>
|
10781
10781
|
</li>
|
@@ -12545,14 +12545,14 @@
|
|
12545
12545
|
<code class="ruby"> def signature</code>
|
12546
12546
|
</li>
|
12547
12547
|
|
12548
|
-
<li class="covered" data-hits="
|
12549
|
-
<span class="hits">
|
12548
|
+
<li class="covered" data-hits="59862" data-linenumber="94">
|
12549
|
+
<span class="hits">59862</span>
|
12550
12550
|
|
12551
12551
|
<code class="ruby"> @signature ||= [@variable1, @index1, @variable2, @index2].freeze</code>
|
12552
12552
|
</li>
|
12553
12553
|
|
12554
|
-
<li class="covered" data-hits="
|
12555
|
-
<span class="hits">
|
12554
|
+
<li class="covered" data-hits="59862" data-linenumber="95">
|
12555
|
+
<span class="hits">59862</span>
|
12556
12556
|
|
12557
12557
|
<code class="ruby"> @signature</code>
|
12558
12558
|
</li>
|
@@ -12635,14 +12635,14 @@
|
|
12635
12635
|
<code class="ruby"> def remove</code>
|
12636
12636
|
</li>
|
12637
12637
|
|
12638
|
-
<li class="covered" data-hits="
|
12639
|
-
<span class="hits">
|
12638
|
+
<li class="covered" data-hits="29925" data-linenumber="109">
|
12639
|
+
<span class="hits">29925</span>
|
12640
12640
|
|
12641
12641
|
<code class="ruby"> @variable1.instantiations.delete(self) if @variable1.is_a?(Variable) || @variable1.is_a?(Value)</code>
|
12642
12642
|
</li>
|
12643
12643
|
|
12644
|
-
<li class="covered" data-hits="
|
12645
|
-
<span class="hits">
|
12644
|
+
<li class="covered" data-hits="29925" data-linenumber="110">
|
12645
|
+
<span class="hits">29925</span>
|
12646
12646
|
|
12647
12647
|
<code class="ruby"> @variable2.instantiations.delete(self) if @variable2.is_a?(Variable) || @variable2.is_a?(Value)</code>
|
12648
12648
|
</li>
|
@@ -12653,20 +12653,20 @@
|
|
12653
12653
|
<code class="ruby"> </code>
|
12654
12654
|
</li>
|
12655
12655
|
|
12656
|
-
<li class="covered" data-hits="
|
12657
|
-
<span class="hits">
|
12656
|
+
<li class="covered" data-hits="29925" data-linenumber="112">
|
12657
|
+
<span class="hits">29925</span>
|
12658
12658
|
|
12659
12659
|
<code class="ruby"> @deleted = true</code>
|
12660
12660
|
</li>
|
12661
12661
|
|
12662
|
-
<li class="covered" data-hits="
|
12663
|
-
<span class="hits">
|
12662
|
+
<li class="covered" data-hits="29925" data-linenumber="113">
|
12663
|
+
<span class="hits">29925</span>
|
12664
12664
|
|
12665
12665
|
<code class="ruby"> @@instantiations.delete(signature)</code>
|
12666
12666
|
</li>
|
12667
12667
|
|
12668
|
-
<li class="covered" data-hits="
|
12669
|
-
<span class="hits">
|
12668
|
+
<li class="covered" data-hits="29925" data-linenumber="114">
|
12669
|
+
<span class="hits">29925</span>
|
12670
12670
|
|
12671
12671
|
<code class="ruby"> @deleted</code>
|
12672
12672
|
</li>
|
@@ -20849,7 +20849,7 @@
|
|
20849
20849
|
<li class="covered" data-hits="77" data-linenumber="119">
|
20850
20850
|
<span class="hits">77</span>
|
20851
20851
|
|
20852
|
-
<code class="ruby"> block.call(subgoal)</code>
|
20852
|
+
<code class="ruby"> !goal.terminated? && block.call(subgoal)</code>
|
20853
20853
|
</li>
|
20854
20854
|
|
20855
20855
|
<li class="never" data-hits="" data-linenumber="120">
|
@@ -20945,7 +20945,7 @@
|
|
20945
20945
|
<li class="covered" data-hits="1" data-linenumber="135">
|
20946
20946
|
<span class="hits">1</span>
|
20947
20947
|
|
20948
|
-
<code class="ruby"> block.call(subgoal)</code>
|
20948
|
+
<code class="ruby"> !goal.terminated? && block.call(subgoal)</code>
|
20949
20949
|
</li>
|
20950
20950
|
|
20951
20951
|
<li class="covered" data-hits="1" data-linenumber="136">
|
@@ -21023,7 +21023,7 @@
|
|
21023
21023
|
<li class="covered" data-hits="457" data-linenumber="148">
|
21024
21024
|
<span class="hits">457</span>
|
21025
21025
|
|
21026
|
-
<code class="ruby"> block.call(goal)</code>
|
21026
|
+
<code class="ruby"> !goal.terminated? && block.call(goal)</code>
|
21027
21027
|
</li>
|
21028
21028
|
|
21029
21029
|
<li class="never" data-hits="" data-linenumber="149">
|
@@ -21035,7 +21035,7 @@
|
|
21035
21035
|
<li class="covered" data-hits="2824" data-linenumber="150">
|
21036
21036
|
<span class="hits">2824</span>
|
21037
21037
|
|
21038
|
-
<code class="ruby"> result = satisfy_conjunction(goal, subsubgoal, conjunction, &block)</code>
|
21038
|
+
<code class="ruby"> result = !goal.terminated? && satisfy_conjunction(goal, subsubgoal, conjunction, &block)</code>
|
21039
21039
|
</li>
|
21040
21040
|
|
21041
21041
|
<li class="never" data-hits="" data-linenumber="151">
|
@@ -21077,7 +21077,7 @@
|
|
21077
21077
|
<li class="covered" data-hits="3663" data-linenumber="157">
|
21078
21078
|
<span class="hits">3663</span>
|
21079
21079
|
|
21080
|
-
<code class="ruby"> result
|
21080
|
+
<code class="ruby"> result && !goal.terminated?</code>
|
21081
21081
|
</li>
|
21082
21082
|
|
21083
21083
|
<li class="never" data-hits="" data-linenumber="158">
|
@@ -24276,20 +24276,20 @@
|
|
24276
24276
|
<code class="ruby"> def remove</code>
|
24277
24277
|
</li>
|
24278
24278
|
|
24279
|
-
<li class="covered" data-hits="
|
24280
|
-
<span class="hits">
|
24279
|
+
<li class="covered" data-hits="31379" data-linenumber="265">
|
24280
|
+
<span class="hits">31379</span>
|
24281
24281
|
|
24282
24282
|
<code class="ruby"> @instantiations.dup.each(&:remove)</code>
|
24283
24283
|
</li>
|
24284
24284
|
|
24285
|
-
<li class="covered" data-hits="
|
24286
|
-
<span class="hits">
|
24285
|
+
<li class="covered" data-hits="31379" data-linenumber="266">
|
24286
|
+
<span class="hits">31379</span>
|
24287
24287
|
|
24288
24288
|
<code class="ruby"> @instantiations[0..-1] = []</code>
|
24289
24289
|
</li>
|
24290
24290
|
|
24291
|
-
<li class="covered" data-hits="
|
24292
|
-
<span class="hits">
|
24291
|
+
<li class="covered" data-hits="31379" data-linenumber="267">
|
24292
|
+
<span class="hits">31379</span>
|
24293
24293
|
|
24294
24294
|
<code class="ruby"> true</code>
|
24295
24295
|
</li>
|
@@ -30299,7 +30299,7 @@
|
|
30299
30299
|
<li class="covered" data-hits="1" data-linenumber="647">
|
30300
30300
|
<span class="hits">1</span>
|
30301
30301
|
|
30302
|
-
<code class="ruby"> it 'should not solve a
|
30302
|
+
<code class="ruby"> it 'should not solve a fallacy' do</code>
|
30303
30303
|
</li>
|
30304
30304
|
|
30305
30305
|
<li class="covered" data-hits="1" data-linenumber="648">
|
@@ -30317,7 +30317,7 @@
|
|
30317
30317
|
<li class="covered" data-hits="1" data-linenumber="650">
|
30318
30318
|
<span class="hits">1</span>
|
30319
30319
|
|
30320
|
-
<code class="ruby"> fact(42).
|
30320
|
+
<code class="ruby"> fact(42).fallacy!</code>
|
30321
30321
|
</li>
|
30322
30322
|
|
30323
30323
|
<li class="never" data-hits="" data-linenumber="651">
|
@@ -54236,7 +54236,7 @@
|
|
54236
54236
|
<li class="covered" data-hits="1" data-linenumber="396">
|
54237
54237
|
<span class="hits">1</span>
|
54238
54238
|
|
54239
|
-
<code class="ruby"> it 'should return
|
54239
|
+
<code class="ruby"> it 'should return a solution when given unequal values' do</code>
|
54240
54240
|
</li>
|
54241
54241
|
|
54242
54242
|
<li class="covered" data-hits="1" data-linenumber="397">
|
@@ -54272,7 +54272,7 @@
|
|
54272
54272
|
<li class="covered" data-hits="1" data-linenumber="402">
|
54273
54273
|
<span class="hits">1</span>
|
54274
54274
|
|
54275
|
-
<code class="ruby"> it 'should return
|
54275
|
+
<code class="ruby"> it 'should return no solutions when given equal values' do</code>
|
54276
54276
|
</li>
|
54277
54277
|
|
54278
54278
|
<li class="covered" data-hits="1" data-linenumber="403">
|
@@ -54308,7 +54308,7 @@
|
|
54308
54308
|
<li class="covered" data-hits="1" data-linenumber="408">
|
54309
54309
|
<span class="hits">1</span>
|
54310
54310
|
|
54311
|
-
<code class="ruby"> it 'should return
|
54311
|
+
<code class="ruby"> it 'should return no solutions with an unbound variable when given the same unbound variable' do</code>
|
54312
54312
|
</li>
|
54313
54313
|
|
54314
54314
|
<li class="covered" data-hits="1" data-linenumber="409">
|
@@ -54344,7 +54344,7 @@
|
|
54344
54344
|
<li class="covered" data-hits="1" data-linenumber="414">
|
54345
54345
|
<span class="hits">1</span>
|
54346
54346
|
|
54347
|
-
<code class="ruby"> it 'should return
|
54347
|
+
<code class="ruby"> it 'should return a solution when given two unbound variables' do</code>
|
54348
54348
|
</li>
|
54349
54349
|
|
54350
54350
|
<li class="covered" data-hits="1" data-linenumber="415">
|
@@ -54380,7 +54380,7 @@
|
|
54380
54380
|
<li class="covered" data-hits="1" data-linenumber="420">
|
54381
54381
|
<span class="hits">1</span>
|
54382
54382
|
|
54383
|
-
<code class="ruby"> it 'should return
|
54383
|
+
<code class="ruby"> it 'should return no solutions with unbound variables when given given two uninstantiated variables that are bound to each other' do</code>
|
54384
54384
|
</li>
|
54385
54385
|
|
54386
54386
|
<li class="covered" data-hits="1" data-linenumber="421">
|
@@ -54452,7 +54452,7 @@
|
|
54452
54452
|
<li class="covered" data-hits="1" data-linenumber="432">
|
54453
54453
|
<span class="hits">1</span>
|
54454
54454
|
|
54455
|
-
<code class="ruby"> it 'should return
|
54455
|
+
<code class="ruby"> it 'should return a solution when given two uninstantiated variables that are not bound to each other' do</code>
|
54456
54456
|
</li>
|
54457
54457
|
|
54458
54458
|
<li class="covered" data-hits="1" data-linenumber="433">
|
@@ -61461,7 +61461,7 @@
|
|
61461
61461
|
<li class="covered" data-hits="1" data-linenumber="257">
|
61462
61462
|
<span class="hits">1</span>
|
61463
61463
|
|
61464
|
-
<code class="ruby"> it 'should add new
|
61464
|
+
<code class="ruby"> it 'should add new fallacies to a predicate' do</code>
|
61465
61465
|
</li>
|
61466
61466
|
|
61467
61467
|
<li class="covered" data-hits="1" data-linenumber="258">
|
@@ -61479,7 +61479,7 @@
|
|
61479
61479
|
<li class="covered" data-hits="1" data-linenumber="260">
|
61480
61480
|
<span class="hits">1</span>
|
61481
61481
|
|
61482
|
-
<code class="ruby"> alpha.('p','q').
|
61482
|
+
<code class="ruby"> alpha.('p','q').fallacy!</code>
|
61483
61483
|
</li>
|
61484
61484
|
|
61485
61485
|
<li class="never" data-hits="" data-linenumber="261">
|
@@ -80247,7 +80247,7 @@
|
|
80247
80247
|
<li class="covered" data-hits="1" data-linenumber="123">
|
80248
80248
|
<span class="hits">1</span>
|
80249
80249
|
|
80250
|
-
<code class="ruby"> not_same(:X,:X).
|
80250
|
+
<code class="ruby"> not_same(:X,:X).cut_fallacy!</code>
|
80251
80251
|
</li>
|
80252
80252
|
|
80253
80253
|
<li class="covered" data-hits="1" data-linenumber="124">
|