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