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.
@@ -1056,7 +1056,7 @@
1056
1056
  </div>
1057
1057
 
1058
1058
  <div id="footer">
1059
- Generated on Sun Aug 2 19:24:17 2020 by
1059
+ Generated on Thu Aug 6 22:13:58 2020 by
1060
1060
  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
1061
1061
  0.9.19 (ruby-2.6.5).
1062
1062
  </div>
@@ -664,7 +664,7 @@
664
664
  </div>
665
665
 
666
666
  <div id="footer">
667
- Generated on Sun Aug 2 19:24:17 2020 by
667
+ Generated on Thu Aug 6 22:13:58 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>
@@ -133,7 +133,7 @@
133
133
 
134
134
  </div>
135
135
  </dt>
136
- <dd><pre class="code"><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>1.0.0</span><span class='tstring_end'>&#39;</span></span><span class='period'>.</span><span class='id identifier rubyid_freeze'>freeze</span></pre></dd>
136
+ <dd><pre class="code"><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>1.0.1</span><span class='tstring_end'>&#39;</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'>&#39;</span><span class='tstring_content'>2020-08-02</span><span class='tstring_end'>&#39;</span></span><span class='period'>.</span><span class='id identifier rubyid_freeze'>freeze</span></pre></dd>
152
+ <dd><pre class="code"><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>2020-08-06</span><span class='tstring_end'>&#39;</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">
@@ -4406,7 +4406,7 @@
4406
4406
  </div>
4407
4407
 
4408
4408
  <div id="footer">
4409
- Generated on Sun Aug 2 19:24:16 2020 by
4409
+ Generated on Thu Aug 6 22:13:57 2020 by
4410
4410
  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
4411
4411
  0.9.19 (ruby-2.6.5).
4412
4412
  </div>
@@ -491,7 +491,7 @@
491
491
  </div>
492
492
 
493
493
  <div id="footer">
494
- Generated on Sun Aug 2 19:24:17 2020 by
494
+ Generated on Thu Aug 6 22:13:58 2020 by
495
495
  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
496
496
  0.9.19 (ruby-2.6.5).
497
497
  </div>
@@ -451,7 +451,7 @@
451
451
  </div>
452
452
 
453
453
  <div id="footer">
454
- Generated on Sun Aug 2 19:24:16 2020 by
454
+ Generated on Thu Aug 6 22:13:56 2020 by
455
455
  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
456
456
  0.9.19 (ruby-2.6.5).
457
457
  </div>
@@ -96,11 +96,11 @@
96
96
 
97
97
  <p>It is entirely possible to create a Ruby program that is effectively just a Prolog program. The main purpose of Porolog though is to add declarative logic programming to Ruby and allow hybrid programming, in the same way that Ruby allows hybrid programming in the functional programming paradigm.</p>
98
98
 
99
- <p>This then Ruby programs to be written spanning all the major programming paradigms: - Imperative - Functional - Object Oriented - Declarative Logic</p>
99
+ <p>This then enables Ruby programs to be written spanning all the major programming paradigms: - Imperative - Functional - Object Oriented - Declarative Logic</p>
100
100
 
101
101
  <h3 id="label-Basic+Usage">Basic Usage</h3>
102
102
 
103
- <p>Using <code>porolog</code> involves creating logic from facts and rules. An example, of the most basic usage uses just facts.</p>
103
+ <p>Using <code>porolog</code> involves creating logic from facts and rules. An example of the most basic usage, using just facts.</p>
104
104
 
105
105
  <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_require'>require</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>porolog</span><span class='tstring_end'>&#39;</span></span>
106
106
 
@@ -129,7 +129,7 @@
129
129
  <span class='kw'>class</span> <span class='const'>Numbers</span>
130
130
 
131
131
  <span class='const'>Predicate</span><span class='period'>.</span><span class='id identifier rubyid_scope'>scope</span> <span class='kw'>self</span>
132
- <span class='id identifier rubyid_predicate'>predicate</span> <span class='symbol'>:prime</span>
132
+ <span class='id identifier rubyid_predicate'>predicate</span> <span class='symbol'>:prime</span><span class='comma'>,</span> <span class='label'>class_base:</span> <span class='kw'>self</span>
133
133
 
134
134
  <span class='id identifier rubyid_prime'>prime</span><span class='lparen'>(</span><span class='int'>2</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_fact!'>fact!</span>
135
135
  <span class='id identifier rubyid_prime'>prime</span><span class='lparen'>(</span><span class='int'>3</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_fact!'>fact!</span>
@@ -160,7 +160,7 @@
160
160
 
161
161
  <p>A Predicate represents a Prolog predicate. They form the basis for rules and queries.</p>
162
162
 
163
- <p>The Scope class enables you to have multiple logic programs embedded in the same Ruby program. A Scope object defines a scope for the predicates of a logic programme.</p>
163
+ <p>The Scope class enables you to have multiple logic programs embedded in the same Ruby program. A Scope object defines a scope for the predicates of a logic programme. This allows you to have different predicates with the same name.</p>
164
164
 
165
165
  <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_require'>require</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>porolog</span><span class='tstring_end'>&#39;</span></span>
166
166
 
@@ -182,14 +182,9 @@
182
182
  <span class='id identifier rubyid_prime'>prime</span><span class='period'>.</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>pump D</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_fact!'>fact!</span>
183
183
 
184
184
  <span class='comment'># -- Assertions --
185
- </span><span class='id identifier rubyid_assert_equal'>assert_equal</span> <span class='lbracket'>[</span><span class='symbol'>:default</span><span class='comma'>,</span><span class='symbol'>:numbers</span><span class='comma'>,</span><span class='symbol'>:pumps</span><span class='rbracket'>]</span><span class='comma'>,</span> <span class='const'>Scope</span><span class='period'>.</span><span class='id identifier rubyid_scopes'>scopes</span>
186
-
187
- <span class='id identifier rubyid_assert_scope'>assert_scope</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/Scope.html" title="Porolog::Scope (class)">Scope</a></span></span><span class='lbracket'>[</span><span class='symbol'>:default</span><span class='rbracket'>]</span><span class='comma'>,</span> <span class='symbol'>:default</span><span class='comma'>,</span> <span class='lbracket'>[</span><span class='rbracket'>]</span>
188
- <span class='id identifier rubyid_assert_scope'>assert_scope</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/Scope.html" title="Porolog::Scope (class)">Scope</a></span></span><span class='lbracket'>[</span><span class='symbol'>:numbers</span><span class='rbracket'>]</span><span class='comma'>,</span> <span class='symbol'>:first</span><span class='comma'>,</span> <span class='lbracket'>[</span><span class='id identifier rubyid_prime1'>prime1</span><span class='rbracket'>]</span>
189
- <span class='id identifier rubyid_assert_scope'>assert_scope</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/Scope.html" title="Porolog::Scope (class)">Scope</a></span></span><span class='lbracket'>[</span><span class='symbol'>:pumps</span><span class='rbracket'>]</span><span class='comma'>,</span> <span class='symbol'>:second</span><span class='comma'>,</span> <span class='lbracket'>[</span><span class='id identifier rubyid_prime2'>prime2</span><span class='rbracket'>]</span>
190
-
191
- <span class='id identifier rubyid_assert_equal'>assert_equal</span> <span class='symbol'>:prime</span><span class='comma'>,</span> <span class='id identifier rubyid_prime1'>prime1</span><span class='period'>.</span><span class='id identifier rubyid_name'>name</span>
192
- <span class='id identifier rubyid_assert_equal'>assert_equal</span> <span class='symbol'>:prime</span><span class='comma'>,</span> <span class='id identifier rubyid_prime2'>prime2</span><span class='period'>.</span><span class='id identifier rubyid_name'>name</span>
185
+ </span><span class='id identifier rubyid_assert_equal'>assert_equal</span> <span class='lbracket'>[</span><span class='symbol'>:default</span><span class='comma'>,</span><span class='symbol'>:numbers</span><span class='comma'>,</span><span class='symbol'>:pumps</span><span class='rbracket'>]</span><span class='comma'>,</span> <span class='const'>Scope</span><span class='period'>.</span><span class='id identifier rubyid_scopes'>scopes</span>
186
+ <span class='id identifier rubyid_assert_equal'>assert_equal</span> <span class='symbol'>:prime</span><span class='comma'>,</span> <span class='id identifier rubyid_prime1'>prime1</span><span class='period'>.</span><span class='id identifier rubyid_name'>name</span>
187
+ <span class='id identifier rubyid_assert_equal'>assert_equal</span> <span class='symbol'>:prime</span><span class='comma'>,</span> <span class='id identifier rubyid_prime2'>prime2</span><span class='period'>.</span><span class='id identifier rubyid_name'>name</span>
193
188
 
194
189
  <span class='id identifier rubyid_solutions'>solutions</span> <span class='op'>=</span> <span class='lbracket'>[</span>
195
190
  <span class='lbrace'>{</span> <span class='label'>X:</span> <span class='int'>2</span> <span class='rbrace'>}</span><span class='comma'>,</span>
@@ -198,7 +193,7 @@
198
193
  <span class='lbrace'>{</span> <span class='label'>X:</span> <span class='int'>7</span> <span class='rbrace'>}</span><span class='comma'>,</span>
199
194
  <span class='lbrace'>{</span> <span class='label'>X:</span> <span class='int'>11</span> <span class='rbrace'>}</span><span class='comma'>,</span>
200
195
  <span class='rbracket'>]</span>
201
- <span class='id identifier rubyid_assert_equal'>assert_equal</span> <span class='id identifier rubyid_solutions'>solutions</span><span class='comma'>,</span> <span class='id identifier rubyid_prime1'>prime1</span><span class='period'>.</span><span class='lparen'>(</span><span class='symbol'>:X</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_solve'>solve</span>
196
+ <span class='id identifier rubyid_assert_equal'>assert_equal</span> <span class='id identifier rubyid_solutions'>solutions</span><span class='comma'>,</span> <span class='id identifier rubyid_prime1'>prime1</span><span class='period'>.</span><span class='lparen'>(</span><span class='symbol'>:X</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_solve'>solve</span>
202
197
 
203
198
  <span class='id identifier rubyid_solutions'>solutions</span> <span class='op'>=</span> <span class='lbracket'>[</span>
204
199
  <span class='lbrace'>{</span> <span class='label'>X:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>pump A</span><span class='tstring_end'>&#39;</span></span> <span class='rbrace'>}</span><span class='comma'>,</span>
@@ -206,9 +201,105 @@
206
201
  <span class='lbrace'>{</span> <span class='label'>X:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>pump C</span><span class='tstring_end'>&#39;</span></span> <span class='rbrace'>}</span><span class='comma'>,</span>
207
202
  <span class='lbrace'>{</span> <span class='label'>X:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>pump D</span><span class='tstring_end'>&#39;</span></span> <span class='rbrace'>}</span><span class='comma'>,</span>
208
203
  <span class='rbracket'>]</span>
209
- <span class='id identifier rubyid_assert_equal'>assert_equal</span> <span class='id identifier rubyid_solutions'>solutions</span><span class='comma'>,</span> <span class='id identifier rubyid_prime2'>prime2</span><span class='period'>.</span><span class='lparen'>(</span><span class='symbol'>:X</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_solve'>solve</span>
204
+ <span class='id identifier rubyid_assert_equal'>assert_equal</span> <span class='id identifier rubyid_solutions'>solutions</span><span class='comma'>,</span> <span class='id identifier rubyid_prime2'>prime2</span><span class='period'>.</span><span class='lparen'>(</span><span class='symbol'>:X</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_solve'>solve</span>
210
205
  </code></pre>
211
206
 
207
+ <h3 id="label-A+Complete+Example">A Complete Example</h3>
208
+
209
+ <p>This example shows:</p>
210
+ <ul><li>
211
+ <p>how to define facts,</p>
212
+ </li><li>
213
+ <p>how to define rules,</p>
214
+ </li><li>
215
+ <p>how to encapsulate predicates within a class,</p>
216
+ </li><li>
217
+ <p>how to specify a cut,</p>
218
+ </li><li>
219
+ <p>how to use builtin predicates, and</p>
220
+ </li><li>
221
+ <p>how to initiate queries.</p>
222
+ </li></ul>
223
+
224
+ <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_require'>require</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>porolog</span><span class='tstring_end'>&#39;</span></span>
225
+
226
+ <span class='id identifier rubyid_include'>include</span> <span class='const'><span class='object_link'><a href="Porolog.html" title="Porolog (module)">Porolog</a></span></span>
227
+
228
+ <span class='kw'>class</span> <span class='const'>Numbers</span>
229
+
230
+ <span class='const'>Predicate</span><span class='period'>.</span><span class='id identifier rubyid_scope'>scope</span> <span class='kw'>self</span>
231
+ <span class='id identifier rubyid_builtin'>builtin</span> <span class='symbol'>:gtr</span><span class='comma'>,</span> <span class='symbol'>:is</span><span class='comma'>,</span> <span class='symbol'>:noteq</span><span class='comma'>,</span> <span class='symbol'>:between</span><span class='comma'>,</span> <span class='label'>class_base:</span> <span class='kw'>self</span>
232
+ <span class='id identifier rubyid_predicate'>predicate</span> <span class='symbol'>:prime</span><span class='comma'>,</span> <span class='symbol'>:search_prime</span><span class='comma'>,</span> <span class='label'>class_base:</span> <span class='kw'>self</span>
233
+
234
+ <span class='id identifier rubyid_prime'>prime</span><span class='lparen'>(</span><span class='int'>2</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_fact!'>fact!</span>
235
+ <span class='id identifier rubyid_prime'>prime</span><span class='lparen'>(</span><span class='int'>3</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_fact!'>fact!</span>
236
+ <span class='id identifier rubyid_prime'>prime</span><span class='lparen'>(</span><span class='symbol'>:X</span><span class='rparen'>)</span> <span class='op'>&lt;&lt;</span> <span class='lbracket'>[</span>
237
+ <span class='id identifier rubyid_between'>between</span><span class='lparen'>(</span><span class='symbol'>:X</span><span class='comma'>,</span> <span class='int'>4</span><span class='comma'>,</span> <span class='int'>100</span><span class='rparen'>)</span><span class='comma'>,</span>
238
+ <span class='id identifier rubyid_is'>is</span><span class='lparen'>(</span><span class='symbol'>:X_mod_2</span><span class='comma'>,</span> <span class='symbol'>:X</span><span class='rparen'>)</span> <span class='lbrace'>{</span><span class='op'>|</span><span class='id identifier rubyid_x'>x</span><span class='op'>|</span> <span class='id identifier rubyid_x'>x</span> <span class='op'>%</span> <span class='int'>2</span> <span class='rbrace'>}</span><span class='comma'>,</span>
239
+ <span class='id identifier rubyid_noteq'>noteq</span><span class='lparen'>(</span><span class='symbol'>:X_mod_2</span><span class='comma'>,</span> <span class='int'>0</span><span class='rparen'>)</span><span class='comma'>,</span>
240
+ <span class='symbol'>:CUT</span><span class='comma'>,</span>
241
+ <span class='id identifier rubyid_search_prime'>search_prime</span><span class='lparen'>(</span><span class='symbol'>:X</span><span class='comma'>,</span> <span class='int'>3</span><span class='rparen'>)</span><span class='comma'>,</span>
242
+ <span class='rbracket'>]</span>
243
+
244
+ <span class='id identifier rubyid_search_prime'>search_prime</span><span class='lparen'>(</span><span class='symbol'>:X</span><span class='comma'>,</span> <span class='symbol'>:N</span><span class='rparen'>)</span> <span class='op'>&lt;&lt;</span> <span class='lbracket'>[</span>
245
+ <span class='id identifier rubyid_is'>is</span><span class='lparen'>(</span><span class='symbol'>:N_squared</span><span class='comma'>,</span> <span class='symbol'>:N</span><span class='rparen'>)</span> <span class='lbrace'>{</span><span class='op'>|</span><span class='id identifier rubyid_n'>n</span><span class='op'>|</span> <span class='id identifier rubyid_n'>n</span> <span class='op'>**</span> <span class='int'>2</span> <span class='rbrace'>}</span><span class='comma'>,</span>
246
+ <span class='id identifier rubyid_gtr'>gtr</span><span class='lparen'>(</span><span class='symbol'>:N_squared</span><span class='comma'>,</span> <span class='symbol'>:X</span><span class='rparen'>)</span><span class='comma'>,</span>
247
+ <span class='symbol'>:CUT</span>
248
+ <span class='rbracket'>]</span>
249
+
250
+ <span class='id identifier rubyid_search_prime'>search_prime</span><span class='lparen'>(</span><span class='symbol'>:X</span><span class='comma'>,</span> <span class='symbol'>:N</span><span class='rparen'>)</span> <span class='op'>&lt;&lt;</span> <span class='lbracket'>[</span>
251
+ <span class='id identifier rubyid_is'>is</span><span class='lparen'>(</span><span class='symbol'>:X_mod_N</span><span class='comma'>,</span> <span class='symbol'>:X</span><span class='comma'>,</span> <span class='symbol'>:N</span><span class='rparen'>)</span> <span class='lbrace'>{</span><span class='op'>|</span><span class='id identifier rubyid_x'>x</span><span class='comma'>,</span><span class='id identifier rubyid_n'>n</span><span class='op'>|</span> <span class='id identifier rubyid_x'>x</span> <span class='op'>%</span> <span class='id identifier rubyid_n'>n</span> <span class='rbrace'>}</span><span class='comma'>,</span>
252
+ <span class='id identifier rubyid_noteq'>noteq</span><span class='lparen'>(</span><span class='symbol'>:X_mod_N</span><span class='comma'>,</span> <span class='int'>0</span><span class='rparen'>)</span><span class='comma'>,</span>
253
+ <span class='id identifier rubyid_is'>is</span><span class='lparen'>(</span><span class='symbol'>:M</span><span class='comma'>,</span> <span class='symbol'>:N</span><span class='rparen'>)</span> <span class='lbrace'>{</span><span class='op'>|</span><span class='id identifier rubyid_n'>n</span><span class='op'>|</span> <span class='id identifier rubyid_n'>n</span> <span class='op'>+</span> <span class='int'>2</span> <span class='rbrace'>}</span><span class='comma'>,</span>
254
+ <span class='symbol'>:CUT</span><span class='comma'>,</span>
255
+ <span class='id identifier rubyid_search_prime'>search_prime</span><span class='lparen'>(</span><span class='symbol'>:X</span><span class='comma'>,</span> <span class='symbol'>:M</span><span class='rparen'>)</span><span class='comma'>,</span>
256
+ <span class='rbracket'>]</span>
257
+
258
+ <span class='kw'>def</span> <span class='id identifier rubyid_show_primes'>show_primes</span>
259
+ <span class='id identifier rubyid_solutions'>solutions</span> <span class='op'>=</span> <span class='id identifier rubyid_prime'>prime</span><span class='lparen'>(</span><span class='symbol'>:X</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_solve'>solve</span>
260
+
261
+ <span class='id identifier rubyid_solutions'>solutions</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_solution'>solution</span><span class='op'>|</span>
262
+ <span class='id identifier rubyid_puts'>puts</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_solution'>solution</span><span class='lbracket'>[</span><span class='symbol'>:X</span><span class='rbracket'>]</span><span class='embexpr_end'>}</span><span class='tstring_content'> is prime</span><span class='tstring_end'>&quot;</span></span>
263
+ <span class='kw'>end</span>
264
+ <span class='kw'>end</span>
265
+
266
+ <span class='kw'>def</span> <span class='id identifier rubyid_primes'>primes</span>
267
+ <span class='const'>Numbers</span><span class='period'>.</span><span class='id identifier rubyid_prime'>prime</span><span class='lparen'>(</span><span class='symbol'>:X</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_solve_for'>solve_for</span><span class='lparen'>(</span><span class='symbol'>:X</span><span class='rparen'>)</span>
268
+ <span class='kw'>end</span>
269
+
270
+ <span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_kind'>kind</span><span class='lparen'>(</span><span class='id identifier rubyid_number'>number</span><span class='rparen'>)</span>
271
+ <span class='id identifier rubyid_prime'>prime</span><span class='lparen'>(</span><span class='id identifier rubyid_number'>number</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_valid?'>valid?</span> <span class='op'>?</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>prime</span><span class='tstring_end'>&#39;</span></span> <span class='op'>:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>not prime</span><span class='tstring_end'>&#39;</span></span>
272
+ <span class='kw'>end</span>
273
+
274
+ <span class='kw'>def</span> <span class='id identifier rubyid_initialize'>initialize</span><span class='lparen'>(</span><span class='id identifier rubyid_number'>number</span><span class='rparen'>)</span>
275
+ <span class='ivar'>@number</span> <span class='op'>=</span> <span class='id identifier rubyid_number'>number</span>
276
+ <span class='kw'>end</span>
277
+
278
+ <span class='kw'>def</span> <span class='id identifier rubyid_kind'>kind</span>
279
+ <span class='id identifier rubyid_prime'>prime</span><span class='lparen'>(</span><span class='ivar'>@number</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_valid?'>valid?</span> <span class='op'>?</span> <span class='symbol'>:prime</span> <span class='op'>:</span> <span class='symbol'>:not_prime</span>
280
+ <span class='kw'>end</span>
281
+
282
+ <span class='kw'>end</span>
283
+
284
+
285
+ <span class='id identifier rubyid_numbers'>numbers</span> <span class='op'>=</span> <span class='const'>Numbers</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span> <span class='int'>23</span>
286
+ <span class='id identifier rubyid_numbers'>numbers</span><span class='period'>.</span><span class='id identifier rubyid_show_primes'>show_primes</span>
287
+ <span class='id identifier rubyid_puts'>puts</span> <span class='id identifier rubyid_numbers'>numbers</span><span class='period'>.</span><span class='id identifier rubyid_primes'>primes</span><span class='period'>.</span><span class='id identifier rubyid_inspect'>inspect</span>
288
+
289
+ <span class='id identifier rubyid_puts'>puts</span> <span class='const'>Numbers</span><span class='period'>.</span><span class='id identifier rubyid_prime'>prime</span><span class='lparen'>(</span><span class='int'>3</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_valid?'>valid?</span><span class='period'>.</span><span class='id identifier rubyid_inspect'>inspect</span>
290
+
291
+ <span class='id identifier rubyid_puts'>puts</span> <span class='const'>ARGV</span><span class='period'>.</span><span class='id identifier rubyid_inspect'>inspect</span>
292
+ <span class='const'>ARGV</span><span class='period'>.</span><span class='id identifier rubyid_map'>map</span><span class='lparen'>(</span><span class='op'>&amp;</span><span class='symbol'>:to_i</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_arg'>arg</span><span class='op'>|</span>
293
+ <span class='id identifier rubyid_puts'>puts</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_arg'>arg</span><span class='period'>.</span><span class='id identifier rubyid_inspect'>inspect</span><span class='embexpr_end'>}</span><span class='tstring_content'> is </span><span class='embexpr_beg'>#{</span><span class='const'>Numbers</span><span class='period'>.</span><span class='id identifier rubyid_kind'>kind</span><span class='lparen'>(</span><span class='id identifier rubyid_arg'>arg</span><span class='rparen'>)</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span>
294
+ <span class='id identifier rubyid_number'>number</span> <span class='op'>=</span> <span class='const'>Numbers</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span> <span class='id identifier rubyid_arg'>arg</span>
295
+ <span class='id identifier rubyid_puts'>puts</span> <span class='id identifier rubyid_number'>number</span><span class='period'>.</span><span class='id identifier rubyid_kind'>kind</span><span class='period'>.</span><span class='id identifier rubyid_inspect'>inspect</span>
296
+ <span class='kw'>end</span>
297
+ </code></pre>
298
+
299
+ <h3 id="label-Porolog+Wiki">Porolog Wiki</h3>
300
+
301
+ <p>See the Wiki for further details. <a href="https://github.com/wizardofosmium/porolog/wiki">github.com/wizardofosmium/porolog/wiki</a></p>
302
+
212
303
  <h2 id="label-Testing">Testing</h2>
213
304
 
214
305
  <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_rake'>rake</span> <span class='id identifier rubyid_test'>test</span>
@@ -235,7 +326,7 @@
235
326
  </div></div>
236
327
 
237
328
  <div id="footer">
238
- Generated on Sun Aug 2 19:24:16 2020 by
329
+ Generated on Thu Aug 6 22:13:57 2020 by
239
330
  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
240
331
  0.9.19 (ruby-2.6.5).
241
332
  </div>
@@ -96,11 +96,11 @@
96
96
 
97
97
  <p>It is entirely possible to create a Ruby program that is effectively just a Prolog program. The main purpose of Porolog though is to add declarative logic programming to Ruby and allow hybrid programming, in the same way that Ruby allows hybrid programming in the functional programming paradigm.</p>
98
98
 
99
- <p>This then Ruby programs to be written spanning all the major programming paradigms: - Imperative - Functional - Object Oriented - Declarative Logic</p>
99
+ <p>This then enables Ruby programs to be written spanning all the major programming paradigms: - Imperative - Functional - Object Oriented - Declarative Logic</p>
100
100
 
101
101
  <h3 id="label-Basic+Usage">Basic Usage</h3>
102
102
 
103
- <p>Using <code>porolog</code> involves creating logic from facts and rules. An example, of the most basic usage uses just facts.</p>
103
+ <p>Using <code>porolog</code> involves creating logic from facts and rules. An example of the most basic usage, using just facts.</p>
104
104
 
105
105
  <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_require'>require</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>porolog</span><span class='tstring_end'>&#39;</span></span>
106
106
 
@@ -129,7 +129,7 @@
129
129
  <span class='kw'>class</span> <span class='const'>Numbers</span>
130
130
 
131
131
  <span class='const'>Predicate</span><span class='period'>.</span><span class='id identifier rubyid_scope'>scope</span> <span class='kw'>self</span>
132
- <span class='id identifier rubyid_predicate'>predicate</span> <span class='symbol'>:prime</span>
132
+ <span class='id identifier rubyid_predicate'>predicate</span> <span class='symbol'>:prime</span><span class='comma'>,</span> <span class='label'>class_base:</span> <span class='kw'>self</span>
133
133
 
134
134
  <span class='id identifier rubyid_prime'>prime</span><span class='lparen'>(</span><span class='int'>2</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_fact!'>fact!</span>
135
135
  <span class='id identifier rubyid_prime'>prime</span><span class='lparen'>(</span><span class='int'>3</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_fact!'>fact!</span>
@@ -160,7 +160,7 @@
160
160
 
161
161
  <p>A Predicate represents a Prolog predicate. They form the basis for rules and queries.</p>
162
162
 
163
- <p>The Scope class enables you to have multiple logic programs embedded in the same Ruby program. A Scope object defines a scope for the predicates of a logic programme.</p>
163
+ <p>The Scope class enables you to have multiple logic programs embedded in the same Ruby program. A Scope object defines a scope for the predicates of a logic programme. This allows you to have different predicates with the same name.</p>
164
164
 
165
165
  <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_require'>require</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>porolog</span><span class='tstring_end'>&#39;</span></span>
166
166
 
@@ -182,14 +182,9 @@
182
182
  <span class='id identifier rubyid_prime'>prime</span><span class='period'>.</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>pump D</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_fact!'>fact!</span>
183
183
 
184
184
  <span class='comment'># -- Assertions --
185
- </span><span class='id identifier rubyid_assert_equal'>assert_equal</span> <span class='lbracket'>[</span><span class='symbol'>:default</span><span class='comma'>,</span><span class='symbol'>:numbers</span><span class='comma'>,</span><span class='symbol'>:pumps</span><span class='rbracket'>]</span><span class='comma'>,</span> <span class='const'>Scope</span><span class='period'>.</span><span class='id identifier rubyid_scopes'>scopes</span>
186
-
187
- <span class='id identifier rubyid_assert_scope'>assert_scope</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/Scope.html" title="Porolog::Scope (class)">Scope</a></span></span><span class='lbracket'>[</span><span class='symbol'>:default</span><span class='rbracket'>]</span><span class='comma'>,</span> <span class='symbol'>:default</span><span class='comma'>,</span> <span class='lbracket'>[</span><span class='rbracket'>]</span>
188
- <span class='id identifier rubyid_assert_scope'>assert_scope</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/Scope.html" title="Porolog::Scope (class)">Scope</a></span></span><span class='lbracket'>[</span><span class='symbol'>:numbers</span><span class='rbracket'>]</span><span class='comma'>,</span> <span class='symbol'>:first</span><span class='comma'>,</span> <span class='lbracket'>[</span><span class='id identifier rubyid_prime1'>prime1</span><span class='rbracket'>]</span>
189
- <span class='id identifier rubyid_assert_scope'>assert_scope</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/Scope.html" title="Porolog::Scope (class)">Scope</a></span></span><span class='lbracket'>[</span><span class='symbol'>:pumps</span><span class='rbracket'>]</span><span class='comma'>,</span> <span class='symbol'>:second</span><span class='comma'>,</span> <span class='lbracket'>[</span><span class='id identifier rubyid_prime2'>prime2</span><span class='rbracket'>]</span>
190
-
191
- <span class='id identifier rubyid_assert_equal'>assert_equal</span> <span class='symbol'>:prime</span><span class='comma'>,</span> <span class='id identifier rubyid_prime1'>prime1</span><span class='period'>.</span><span class='id identifier rubyid_name'>name</span>
192
- <span class='id identifier rubyid_assert_equal'>assert_equal</span> <span class='symbol'>:prime</span><span class='comma'>,</span> <span class='id identifier rubyid_prime2'>prime2</span><span class='period'>.</span><span class='id identifier rubyid_name'>name</span>
185
+ </span><span class='id identifier rubyid_assert_equal'>assert_equal</span> <span class='lbracket'>[</span><span class='symbol'>:default</span><span class='comma'>,</span><span class='symbol'>:numbers</span><span class='comma'>,</span><span class='symbol'>:pumps</span><span class='rbracket'>]</span><span class='comma'>,</span> <span class='const'>Scope</span><span class='period'>.</span><span class='id identifier rubyid_scopes'>scopes</span>
186
+ <span class='id identifier rubyid_assert_equal'>assert_equal</span> <span class='symbol'>:prime</span><span class='comma'>,</span> <span class='id identifier rubyid_prime1'>prime1</span><span class='period'>.</span><span class='id identifier rubyid_name'>name</span>
187
+ <span class='id identifier rubyid_assert_equal'>assert_equal</span> <span class='symbol'>:prime</span><span class='comma'>,</span> <span class='id identifier rubyid_prime2'>prime2</span><span class='period'>.</span><span class='id identifier rubyid_name'>name</span>
193
188
 
194
189
  <span class='id identifier rubyid_solutions'>solutions</span> <span class='op'>=</span> <span class='lbracket'>[</span>
195
190
  <span class='lbrace'>{</span> <span class='label'>X:</span> <span class='int'>2</span> <span class='rbrace'>}</span><span class='comma'>,</span>
@@ -198,7 +193,7 @@
198
193
  <span class='lbrace'>{</span> <span class='label'>X:</span> <span class='int'>7</span> <span class='rbrace'>}</span><span class='comma'>,</span>
199
194
  <span class='lbrace'>{</span> <span class='label'>X:</span> <span class='int'>11</span> <span class='rbrace'>}</span><span class='comma'>,</span>
200
195
  <span class='rbracket'>]</span>
201
- <span class='id identifier rubyid_assert_equal'>assert_equal</span> <span class='id identifier rubyid_solutions'>solutions</span><span class='comma'>,</span> <span class='id identifier rubyid_prime1'>prime1</span><span class='period'>.</span><span class='lparen'>(</span><span class='symbol'>:X</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_solve'>solve</span>
196
+ <span class='id identifier rubyid_assert_equal'>assert_equal</span> <span class='id identifier rubyid_solutions'>solutions</span><span class='comma'>,</span> <span class='id identifier rubyid_prime1'>prime1</span><span class='period'>.</span><span class='lparen'>(</span><span class='symbol'>:X</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_solve'>solve</span>
202
197
 
203
198
  <span class='id identifier rubyid_solutions'>solutions</span> <span class='op'>=</span> <span class='lbracket'>[</span>
204
199
  <span class='lbrace'>{</span> <span class='label'>X:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>pump A</span><span class='tstring_end'>&#39;</span></span> <span class='rbrace'>}</span><span class='comma'>,</span>
@@ -206,9 +201,105 @@
206
201
  <span class='lbrace'>{</span> <span class='label'>X:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>pump C</span><span class='tstring_end'>&#39;</span></span> <span class='rbrace'>}</span><span class='comma'>,</span>
207
202
  <span class='lbrace'>{</span> <span class='label'>X:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>pump D</span><span class='tstring_end'>&#39;</span></span> <span class='rbrace'>}</span><span class='comma'>,</span>
208
203
  <span class='rbracket'>]</span>
209
- <span class='id identifier rubyid_assert_equal'>assert_equal</span> <span class='id identifier rubyid_solutions'>solutions</span><span class='comma'>,</span> <span class='id identifier rubyid_prime2'>prime2</span><span class='period'>.</span><span class='lparen'>(</span><span class='symbol'>:X</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_solve'>solve</span>
204
+ <span class='id identifier rubyid_assert_equal'>assert_equal</span> <span class='id identifier rubyid_solutions'>solutions</span><span class='comma'>,</span> <span class='id identifier rubyid_prime2'>prime2</span><span class='period'>.</span><span class='lparen'>(</span><span class='symbol'>:X</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_solve'>solve</span>
210
205
  </code></pre>
211
206
 
207
+ <h3 id="label-A+Complete+Example">A Complete Example</h3>
208
+
209
+ <p>This example shows:</p>
210
+ <ul><li>
211
+ <p>how to define facts,</p>
212
+ </li><li>
213
+ <p>how to define rules,</p>
214
+ </li><li>
215
+ <p>how to encapsulate predicates within a class,</p>
216
+ </li><li>
217
+ <p>how to specify a cut,</p>
218
+ </li><li>
219
+ <p>how to use builtin predicates, and</p>
220
+ </li><li>
221
+ <p>how to initiate queries.</p>
222
+ </li></ul>
223
+
224
+ <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_require'>require</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>porolog</span><span class='tstring_end'>&#39;</span></span>
225
+
226
+ <span class='id identifier rubyid_include'>include</span> <span class='const'><span class='object_link'><a href="Porolog.html" title="Porolog (module)">Porolog</a></span></span>
227
+
228
+ <span class='kw'>class</span> <span class='const'>Numbers</span>
229
+
230
+ <span class='const'>Predicate</span><span class='period'>.</span><span class='id identifier rubyid_scope'>scope</span> <span class='kw'>self</span>
231
+ <span class='id identifier rubyid_builtin'>builtin</span> <span class='symbol'>:gtr</span><span class='comma'>,</span> <span class='symbol'>:is</span><span class='comma'>,</span> <span class='symbol'>:noteq</span><span class='comma'>,</span> <span class='symbol'>:between</span><span class='comma'>,</span> <span class='label'>class_base:</span> <span class='kw'>self</span>
232
+ <span class='id identifier rubyid_predicate'>predicate</span> <span class='symbol'>:prime</span><span class='comma'>,</span> <span class='symbol'>:search_prime</span><span class='comma'>,</span> <span class='label'>class_base:</span> <span class='kw'>self</span>
233
+
234
+ <span class='id identifier rubyid_prime'>prime</span><span class='lparen'>(</span><span class='int'>2</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_fact!'>fact!</span>
235
+ <span class='id identifier rubyid_prime'>prime</span><span class='lparen'>(</span><span class='int'>3</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_fact!'>fact!</span>
236
+ <span class='id identifier rubyid_prime'>prime</span><span class='lparen'>(</span><span class='symbol'>:X</span><span class='rparen'>)</span> <span class='op'>&lt;&lt;</span> <span class='lbracket'>[</span>
237
+ <span class='id identifier rubyid_between'>between</span><span class='lparen'>(</span><span class='symbol'>:X</span><span class='comma'>,</span> <span class='int'>4</span><span class='comma'>,</span> <span class='int'>100</span><span class='rparen'>)</span><span class='comma'>,</span>
238
+ <span class='id identifier rubyid_is'>is</span><span class='lparen'>(</span><span class='symbol'>:X_mod_2</span><span class='comma'>,</span> <span class='symbol'>:X</span><span class='rparen'>)</span> <span class='lbrace'>{</span><span class='op'>|</span><span class='id identifier rubyid_x'>x</span><span class='op'>|</span> <span class='id identifier rubyid_x'>x</span> <span class='op'>%</span> <span class='int'>2</span> <span class='rbrace'>}</span><span class='comma'>,</span>
239
+ <span class='id identifier rubyid_noteq'>noteq</span><span class='lparen'>(</span><span class='symbol'>:X_mod_2</span><span class='comma'>,</span> <span class='int'>0</span><span class='rparen'>)</span><span class='comma'>,</span>
240
+ <span class='symbol'>:CUT</span><span class='comma'>,</span>
241
+ <span class='id identifier rubyid_search_prime'>search_prime</span><span class='lparen'>(</span><span class='symbol'>:X</span><span class='comma'>,</span> <span class='int'>3</span><span class='rparen'>)</span><span class='comma'>,</span>
242
+ <span class='rbracket'>]</span>
243
+
244
+ <span class='id identifier rubyid_search_prime'>search_prime</span><span class='lparen'>(</span><span class='symbol'>:X</span><span class='comma'>,</span> <span class='symbol'>:N</span><span class='rparen'>)</span> <span class='op'>&lt;&lt;</span> <span class='lbracket'>[</span>
245
+ <span class='id identifier rubyid_is'>is</span><span class='lparen'>(</span><span class='symbol'>:N_squared</span><span class='comma'>,</span> <span class='symbol'>:N</span><span class='rparen'>)</span> <span class='lbrace'>{</span><span class='op'>|</span><span class='id identifier rubyid_n'>n</span><span class='op'>|</span> <span class='id identifier rubyid_n'>n</span> <span class='op'>**</span> <span class='int'>2</span> <span class='rbrace'>}</span><span class='comma'>,</span>
246
+ <span class='id identifier rubyid_gtr'>gtr</span><span class='lparen'>(</span><span class='symbol'>:N_squared</span><span class='comma'>,</span> <span class='symbol'>:X</span><span class='rparen'>)</span><span class='comma'>,</span>
247
+ <span class='symbol'>:CUT</span>
248
+ <span class='rbracket'>]</span>
249
+
250
+ <span class='id identifier rubyid_search_prime'>search_prime</span><span class='lparen'>(</span><span class='symbol'>:X</span><span class='comma'>,</span> <span class='symbol'>:N</span><span class='rparen'>)</span> <span class='op'>&lt;&lt;</span> <span class='lbracket'>[</span>
251
+ <span class='id identifier rubyid_is'>is</span><span class='lparen'>(</span><span class='symbol'>:X_mod_N</span><span class='comma'>,</span> <span class='symbol'>:X</span><span class='comma'>,</span> <span class='symbol'>:N</span><span class='rparen'>)</span> <span class='lbrace'>{</span><span class='op'>|</span><span class='id identifier rubyid_x'>x</span><span class='comma'>,</span><span class='id identifier rubyid_n'>n</span><span class='op'>|</span> <span class='id identifier rubyid_x'>x</span> <span class='op'>%</span> <span class='id identifier rubyid_n'>n</span> <span class='rbrace'>}</span><span class='comma'>,</span>
252
+ <span class='id identifier rubyid_noteq'>noteq</span><span class='lparen'>(</span><span class='symbol'>:X_mod_N</span><span class='comma'>,</span> <span class='int'>0</span><span class='rparen'>)</span><span class='comma'>,</span>
253
+ <span class='id identifier rubyid_is'>is</span><span class='lparen'>(</span><span class='symbol'>:M</span><span class='comma'>,</span> <span class='symbol'>:N</span><span class='rparen'>)</span> <span class='lbrace'>{</span><span class='op'>|</span><span class='id identifier rubyid_n'>n</span><span class='op'>|</span> <span class='id identifier rubyid_n'>n</span> <span class='op'>+</span> <span class='int'>2</span> <span class='rbrace'>}</span><span class='comma'>,</span>
254
+ <span class='symbol'>:CUT</span><span class='comma'>,</span>
255
+ <span class='id identifier rubyid_search_prime'>search_prime</span><span class='lparen'>(</span><span class='symbol'>:X</span><span class='comma'>,</span> <span class='symbol'>:M</span><span class='rparen'>)</span><span class='comma'>,</span>
256
+ <span class='rbracket'>]</span>
257
+
258
+ <span class='kw'>def</span> <span class='id identifier rubyid_show_primes'>show_primes</span>
259
+ <span class='id identifier rubyid_solutions'>solutions</span> <span class='op'>=</span> <span class='id identifier rubyid_prime'>prime</span><span class='lparen'>(</span><span class='symbol'>:X</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_solve'>solve</span>
260
+
261
+ <span class='id identifier rubyid_solutions'>solutions</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_solution'>solution</span><span class='op'>|</span>
262
+ <span class='id identifier rubyid_puts'>puts</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_solution'>solution</span><span class='lbracket'>[</span><span class='symbol'>:X</span><span class='rbracket'>]</span><span class='embexpr_end'>}</span><span class='tstring_content'> is prime</span><span class='tstring_end'>&quot;</span></span>
263
+ <span class='kw'>end</span>
264
+ <span class='kw'>end</span>
265
+
266
+ <span class='kw'>def</span> <span class='id identifier rubyid_primes'>primes</span>
267
+ <span class='const'>Numbers</span><span class='period'>.</span><span class='id identifier rubyid_prime'>prime</span><span class='lparen'>(</span><span class='symbol'>:X</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_solve_for'>solve_for</span><span class='lparen'>(</span><span class='symbol'>:X</span><span class='rparen'>)</span>
268
+ <span class='kw'>end</span>
269
+
270
+ <span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_kind'>kind</span><span class='lparen'>(</span><span class='id identifier rubyid_number'>number</span><span class='rparen'>)</span>
271
+ <span class='id identifier rubyid_prime'>prime</span><span class='lparen'>(</span><span class='id identifier rubyid_number'>number</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_valid?'>valid?</span> <span class='op'>?</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>prime</span><span class='tstring_end'>&#39;</span></span> <span class='op'>:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>not prime</span><span class='tstring_end'>&#39;</span></span>
272
+ <span class='kw'>end</span>
273
+
274
+ <span class='kw'>def</span> <span class='id identifier rubyid_initialize'>initialize</span><span class='lparen'>(</span><span class='id identifier rubyid_number'>number</span><span class='rparen'>)</span>
275
+ <span class='ivar'>@number</span> <span class='op'>=</span> <span class='id identifier rubyid_number'>number</span>
276
+ <span class='kw'>end</span>
277
+
278
+ <span class='kw'>def</span> <span class='id identifier rubyid_kind'>kind</span>
279
+ <span class='id identifier rubyid_prime'>prime</span><span class='lparen'>(</span><span class='ivar'>@number</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_valid?'>valid?</span> <span class='op'>?</span> <span class='symbol'>:prime</span> <span class='op'>:</span> <span class='symbol'>:not_prime</span>
280
+ <span class='kw'>end</span>
281
+
282
+ <span class='kw'>end</span>
283
+
284
+
285
+ <span class='id identifier rubyid_numbers'>numbers</span> <span class='op'>=</span> <span class='const'>Numbers</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span> <span class='int'>23</span>
286
+ <span class='id identifier rubyid_numbers'>numbers</span><span class='period'>.</span><span class='id identifier rubyid_show_primes'>show_primes</span>
287
+ <span class='id identifier rubyid_puts'>puts</span> <span class='id identifier rubyid_numbers'>numbers</span><span class='period'>.</span><span class='id identifier rubyid_primes'>primes</span><span class='period'>.</span><span class='id identifier rubyid_inspect'>inspect</span>
288
+
289
+ <span class='id identifier rubyid_puts'>puts</span> <span class='const'>Numbers</span><span class='period'>.</span><span class='id identifier rubyid_prime'>prime</span><span class='lparen'>(</span><span class='int'>3</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_valid?'>valid?</span><span class='period'>.</span><span class='id identifier rubyid_inspect'>inspect</span>
290
+
291
+ <span class='id identifier rubyid_puts'>puts</span> <span class='const'>ARGV</span><span class='period'>.</span><span class='id identifier rubyid_inspect'>inspect</span>
292
+ <span class='const'>ARGV</span><span class='period'>.</span><span class='id identifier rubyid_map'>map</span><span class='lparen'>(</span><span class='op'>&amp;</span><span class='symbol'>:to_i</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_arg'>arg</span><span class='op'>|</span>
293
+ <span class='id identifier rubyid_puts'>puts</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_arg'>arg</span><span class='period'>.</span><span class='id identifier rubyid_inspect'>inspect</span><span class='embexpr_end'>}</span><span class='tstring_content'> is </span><span class='embexpr_beg'>#{</span><span class='const'>Numbers</span><span class='period'>.</span><span class='id identifier rubyid_kind'>kind</span><span class='lparen'>(</span><span class='id identifier rubyid_arg'>arg</span><span class='rparen'>)</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span>
294
+ <span class='id identifier rubyid_number'>number</span> <span class='op'>=</span> <span class='const'>Numbers</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span> <span class='id identifier rubyid_arg'>arg</span>
295
+ <span class='id identifier rubyid_puts'>puts</span> <span class='id identifier rubyid_number'>number</span><span class='period'>.</span><span class='id identifier rubyid_kind'>kind</span><span class='period'>.</span><span class='id identifier rubyid_inspect'>inspect</span>
296
+ <span class='kw'>end</span>
297
+ </code></pre>
298
+
299
+ <h3 id="label-Porolog+Wiki">Porolog Wiki</h3>
300
+
301
+ <p>See the Wiki for further details. <a href="https://github.com/wizardofosmium/porolog/wiki">github.com/wizardofosmium/porolog/wiki</a></p>
302
+
212
303
  <h2 id="label-Testing">Testing</h2>
213
304
 
214
305
  <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_rake'>rake</span> <span class='id identifier rubyid_test'>test</span>
@@ -235,7 +326,7 @@
235
326
  </div></div>
236
327
 
237
328
  <div id="footer">
238
- Generated on Sun Aug 2 19:24:16 2020 by
329
+ Generated on Thu Aug 6 22:13:57 2020 by
239
330
  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
240
331
  0.9.19 (ruby-2.6.5).
241
332
  </div>
@@ -326,7 +326,7 @@
326
326
 
327
327
  <li class="even ">
328
328
  <div class="item">
329
- <span class='object_link'><a href="Porolog/Arguments.html#cut_falicy!-instance_method" title="Porolog::Arguments#cut_falicy! (method)">#cut_falicy!</a></span>
329
+ <span class='object_link'><a href="Porolog/Arguments.html#cut_fallacy!-instance_method" title="Porolog::Arguments#cut_fallacy! (method)">#cut_fallacy!</a></span>
330
330
  <small>Porolog::Arguments</small>
331
331
  </div>
332
332
  </li>
@@ -414,7 +414,7 @@
414
414
 
415
415
  <li class="odd ">
416
416
  <div class="item">
417
- <span class='object_link'><a href="Porolog/Arguments.html#falicy!-instance_method" title="Porolog::Arguments#falicy! (method)">#falicy!</a></span>
417
+ <span class='object_link'><a href="Porolog/Arguments.html#fallacy!-instance_method" title="Porolog::Arguments#fallacy! (method)">#fallacy!</a></span>
418
418
  <small>Porolog::Arguments</small>
419
419
  </div>
420
420
  </li>
@@ -102,7 +102,7 @@
102
102
  </div>
103
103
 
104
104
  <div id="footer">
105
- Generated on Sun Aug 2 19:24:16 2020 by
105
+ Generated on Thu Aug 6 22:13:57 2020 by
106
106
  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
107
107
  0.9.19 (ruby-2.6.5).
108
108
  </div>
@@ -11,9 +11,9 @@
11
11
  module Porolog
12
12
 
13
13
  # The most recent version of the Porolog gem.
14
- VERSION = '1.0.0'.freeze
14
+ VERSION = '1.0.1'.freeze
15
15
  # The most recent date of when the VERSION changed.
16
- VERSION_DATE = '2020-08-02'.freeze
16
+ VERSION_DATE = '2020-08-06'.freeze
17
17
 
18
18
  # Represents an unknown tail of a list.
19
19
  UNKNOWN_TAIL = Object.new