mini_kraken 0.2.03 → 0.2.04

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +9 -0
  3. data/lib/mini_kraken/atomic/all_atomic.rb +4 -0
  4. data/lib/mini_kraken/{core → atomic}/atomic_term.rb +23 -9
  5. data/lib/mini_kraken/atomic/k_boolean.rb +42 -0
  6. data/lib/mini_kraken/{core → atomic}/k_integer.rb +2 -1
  7. data/lib/mini_kraken/{core → atomic}/k_symbol.rb +5 -3
  8. data/lib/mini_kraken/{core → composite}/composite_term.rb +6 -4
  9. data/lib/mini_kraken/composite/cons_cell.rb +132 -0
  10. data/lib/mini_kraken/{core → composite}/cons_cell_visitor.rb +1 -1
  11. data/lib/mini_kraken/core/association_walker.rb +14 -14
  12. data/lib/mini_kraken/core/binary_relation.rb +10 -10
  13. data/lib/mini_kraken/core/equals.rb +159 -161
  14. data/lib/mini_kraken/core/goal_relation.rb +2 -2
  15. data/lib/mini_kraken/core/goal_template.rb +7 -7
  16. data/lib/mini_kraken/core/{variable.rb → log_var.rb} +10 -3
  17. data/lib/mini_kraken/core/{variable_ref.rb → log_var_ref.rb} +3 -3
  18. data/lib/mini_kraken/core/tap.rb +46 -0
  19. data/lib/mini_kraken/core/vocabulary.rb +8 -8
  20. data/lib/mini_kraken/glue/dsl.rb +21 -17
  21. data/lib/mini_kraken/glue/fresh_env.rb +7 -2
  22. data/lib/mini_kraken/glue/fresh_env_factory.rb +1 -1
  23. data/lib/mini_kraken/glue/run_star_expression.rb +2 -2
  24. data/lib/mini_kraken/version.rb +1 -1
  25. data/spec/.rubocop.yml +1 -1
  26. data/spec/atomic/atomic_term_spec.rb +94 -0
  27. data/spec/{core → atomic}/k_boolean_spec.rb +19 -34
  28. data/spec/{core → atomic}/k_symbol_spec.rb +3 -11
  29. data/spec/{core → composite}/cons_cell_spec.rb +10 -8
  30. data/spec/{core → composite}/cons_cell_visitor_spec.rb +11 -10
  31. data/spec/core/association_spec.rb +6 -4
  32. data/spec/core/association_walker_spec.rb +8 -6
  33. data/spec/core/conde_spec.rb +19 -17
  34. data/spec/core/conj2_spec.rb +10 -8
  35. data/spec/core/def_relation_spec.rb +9 -7
  36. data/spec/core/disj2_spec.rb +11 -10
  37. data/spec/core/environment_spec.rb +12 -10
  38. data/spec/core/equals_spec.rb +12 -10
  39. data/spec/core/goal_spec.rb +6 -5
  40. data/spec/core/goal_template_spec.rb +5 -5
  41. data/spec/core/{variable_ref_spec.rb → log_var_ref_spec.rb} +4 -4
  42. data/spec/core/{variable_spec.rb → log_var_spec.rb} +4 -4
  43. data/spec/core/vocabulary_spec.rb +12 -11
  44. data/spec/glue/dsl_chap1_spec.rb +0 -45
  45. data/spec/glue/dsl_chap2_spec.rb +115 -7
  46. data/spec/glue/fresh_env_factory_spec.rb +11 -9
  47. data/spec/glue/fresh_env_spec.rb +3 -3
  48. data/spec/glue/run_star_expression_spec.rb +13 -11
  49. data/spec/support/factory_atomic.rb +22 -0
  50. data/spec/support/factory_methods.rb +11 -26
  51. metadata +28 -23
  52. data/lib/mini_kraken/core/cons_cell.rb +0 -82
  53. data/lib/mini_kraken/core/k_boolean.rb +0 -35
@@ -12,8 +12,18 @@ module MiniKraken
12
12
  include DSL
13
13
 
14
14
  context 'Chapter 2 examples:' do
15
+ # ((:a) (:b) (:c))
16
+ let(:abc) { cons(cons(:a), cons(cons(:b), cons(cons(:c)))) }
17
+
18
+ # '(:a :c :o :r :n)
15
19
  let(:acorn) { cons(:a, cons(:c, cons(:o, cons(:r, cons(:n))))) }
16
20
 
21
+ # '(:c :o :r :n)
22
+ let(:corn) { cons(:c, cons(:o, cons(:r, cons(:n)))) }
23
+
24
+ # '(:grape :raisin :pear)'
25
+ let(:fruits) { cons(:grape, cons(:raisin, cons(:pear))) }
26
+
17
27
  it 'accepts caro definition inspired from frame 2:6' do
18
28
  # Reasoned S2, frame 2:6
19
29
  # (defrel (caro p a)
@@ -38,10 +48,10 @@ module MiniKraken
38
48
  # In Scheme:
39
49
  # (defrel (caro p a)
40
50
  # (fresh (d)
41
- # (== (cons a d) p)))
42
- # In Ruby, `p`is a stnadard Kernel method => replaced by `r`
51
+ # (== p (cons a d))))
52
+ # In Ruby, `p`is a standard Kernel method => replace it by `r`
43
53
  def defrel_caro
44
- defrel('caro', %w[r a]) { fresh('d', equals(cons(a, d), r)) }
54
+ defrel('caro', %w[r a]) { fresh('d', equals(r, cons(a, d))) }
45
55
  end
46
56
 
47
57
  it 'passes frame 2:3' do
@@ -83,10 +93,6 @@ module MiniKraken
83
93
  # (caro '(grape raisin pear) x)
84
94
  # (caro '((a) (b) (c)) y)
85
95
  # (== (cons x y) r))) ;; r => ((grape a))
86
- fruits = cons(:grape, cons(:raisin, cons(:pear)))
87
- expect(fruits.to_s).to eq('(:grape :raisin :pear)')
88
- abc = cons(cons(:a), cons(cons(:b), cons(cons(:c))))
89
- expect(abc.to_s).to eq('((:a) (:b) (:c))')
90
96
 
91
97
  result = run_star('r', fresh(%w[x y],
92
98
  [caro(fruits, x),
@@ -94,6 +100,108 @@ module MiniKraken
94
100
  equals(cons(x, y), r)]))
95
101
  expect(result.car).to eq(cons(:grape, cons(:a)))
96
102
  end
103
+
104
+ it 'accepts cdro definition inspired from frame 2:13' do
105
+ # Reasoned S2, frame 2:13
106
+ # (defrel (cdro p d)
107
+ # (fresh (a)
108
+ # (== (cons a d) p)))
109
+
110
+ # As 'p' has a special meaning in Ruby, the argument has been remaned to 'r'
111
+ cdro_rel = defrel('cdro', %w[r d]) do
112
+ fresh('a', equals(cons(a, d), r))
113
+ end
114
+
115
+ expect(cdro_rel).to be_kind_of(Core::DefRelation)
116
+ expect(cdro_rel.name).to eq('cdro')
117
+ expect(cdro_rel.arity).to eq(2)
118
+ expect(cdro_rel.formals[0].name).to eq('r')
119
+ expect(cdro_rel.formals[1].name).to eq('d')
120
+ g_template = cdro_rel.goal_template
121
+ expect(g_template).to be_kind_of(FreshEnvFactory)
122
+ expect(g_template.names).to include('a')
123
+ end
124
+
125
+ # In Scheme:
126
+ # (defrel (cdro p d)
127
+ # (fresh (a)
128
+ # (== p (cons a d))))
129
+ # In Ruby, `p`is a standard Kernel method => replace it by `r`
130
+ def defrel_cdro
131
+ defrel('cdro', %w[r d]) { fresh('aa', equals(r, cons(aa, d))) }
132
+ end
133
+
134
+ it 'passes unnesting process in frame 2:12' do
135
+ defrel_caro
136
+ defrel_cdro
137
+
138
+ # (run* r
139
+ # (fresh (v)
140
+ # (cdro '(acorn) v)
141
+ # (fresh (w)
142
+ # (cdro v w)
143
+ # (caro w r))) ;; r => (o)
144
+
145
+ result = run_star('r', fresh('v',
146
+ [cdro(acorn, v),
147
+ fresh('w',
148
+ [cdro(v, w),
149
+ caro(w, r)])]))
150
+ expect(result.car).to eq(:o)
151
+ end
152
+
153
+ it 'passes frame 2:15' do
154
+ defrel_caro
155
+ defrel_cdro
156
+
157
+ # (run* r
158
+ # (fresh (x y)
159
+ # (cdro '(grape raisin pear) x)
160
+ # (caro '((a) (b) (c)) y)
161
+ # (== (cons x y) r))) ;; r => (((raisin pear) a))
162
+
163
+ result = run_star('r', fresh(%w[x y],
164
+ [cdro(fruits, x),
165
+ caro(abc, y),
166
+ equals(cons(x, y), r)]))
167
+ expect(result.to_s).to eq('(((:raisin :pear) :a))')
168
+ end
169
+
170
+ it 'passes frame 2:16' do
171
+ defrel_cdro
172
+
173
+ # (run* q
174
+ # (cdro '(a c o r n) '(c o r n))) ;; => (_0)
175
+ result = run_star('r', cdro(acorn, corn))
176
+ expect(result.car).to eq(:_0)
177
+ end
178
+
179
+ it 'passes frame 2:17' do
180
+ defrel_cdro
181
+
182
+ # (run* x
183
+ # (cdro '(c o r n) '(,x r n))) ;; => (o)
184
+ result = run_star('x', cdro(corn, cons(x, cons(:r, cons(:n)))))
185
+ expect(result.car).to eq(:o)
186
+ end
187
+
188
+ # it 'passes frame 2:18' do
189
+ # defrel_caro
190
+ # defrel_cdro
191
+
192
+ # # (run* l
193
+ # # (fresh (x)
194
+ # # (cdro l '(c o r n))
195
+ # # (caro l x)
196
+ # # (== 'a x))) ;; l => ('(a c o r n))
197
+
198
+ # result = run_star('l', fresh('x',
199
+ # [tap(cdro(l, corn)), # WRONG l => a c o r n (side effect from other tests)
200
+ # caro(l, x),
201
+ # equals(:aa, x)
202
+ # ]))
203
+ # expect(result.to_s).to eq('((:a :c :o :r :n))')
204
+ # end
97
205
  end # context
98
206
  end # describe
99
207
  end # module
@@ -5,6 +5,7 @@ require_relative '../../lib/mini_kraken/core/formal_arg'
5
5
  require_relative '../../lib/mini_kraken/core/formal_ref'
6
6
  require_relative '../../lib/mini_kraken/core/goal_template'
7
7
 
8
+ require_relative '../support/factory_atomic'
8
9
  require_relative '../support/factory_methods'
9
10
 
10
11
  # Load the class under test
@@ -14,6 +15,7 @@ require_relative '../../lib/mini_kraken/glue/fresh_env_factory'
14
15
  module MiniKraken
15
16
  module Glue
16
17
  describe FreshEnvFactory do
18
+ include MiniKraken::FactoryAtomic # Use mix-in module
17
19
  include FactoryMethods
18
20
 
19
21
  # (fresh (d) (== d r))
@@ -48,7 +50,7 @@ module MiniKraken
48
50
  let(:q_ref) { var_ref('q') }
49
51
  let(:r_formal) { Core::FormalRef.new('r') }
50
52
  let(:a_formal) { Core::FormalRef.new('a') }
51
- let(:t_param1) { Core::ConsCell.new(a_formal, d_ref) }
53
+ let(:t_param1) { Composite::ConsCell.new(a_formal, d_ref) }
52
54
  let(:other_goal_t) do
53
55
  Core::GoalTemplate.new(Core::Equals.instance, [t_param1, r_formal])
54
56
  end
@@ -59,14 +61,14 @@ module MiniKraken
59
61
 
60
62
  # Are variables correctly built?
61
63
  expect(created).to be_kind_of(FreshEnv)
62
- expect(created.vars['d']).to be_kind_of(Core::Variable)
64
+ expect(created.vars['d']).to be_kind_of(Core::LogVar)
63
65
 
64
66
  # Is the goal correectly built?
65
67
  goal = created.goal
66
68
  expect(goal.relation).to eq(Core::Equals.instance)
67
- expect(goal.actuals[0]).to be_kind_of(Core::VariableRef)
69
+ expect(goal.actuals[0]).to be_kind_of(Core::LogVarRef)
68
70
  expect(goal.actuals[0].name).to eq('d')
69
- expect(goal.actuals[1]).to be_kind_of(Core::KSymbol)
71
+ expect(goal.actuals[1]).to be_kind_of(Atomic::KSymbol)
70
72
  expect(goal.actuals[1]).to eq(:pea)
71
73
  end
72
74
 
@@ -78,17 +80,17 @@ module MiniKraken
78
80
 
79
81
  # Are variables correctly built?
80
82
  expect(created).to be_kind_of(FreshEnv)
81
- expect(created.vars['d']).to be_kind_of(Core::Variable)
83
+ expect(created.vars['d']).to be_kind_of(Core::LogVar)
82
84
 
83
85
  # Is the goal correctly built?
84
86
  goal = created.goal
85
87
  expect(goal.relation).to eq(Core::Equals.instance)
86
- expect(goal.actuals[0]).to be_kind_of(Core::ConsCell)
87
- expect(goal.actuals[0].car).to be_kind_of(Core::VariableRef)
88
+ expect(goal.actuals[0]).to be_kind_of(Composite::ConsCell)
89
+ expect(goal.actuals[0].car).to be_kind_of(Core::LogVarRef)
88
90
  expect(goal.actuals[0].car.name).to eq('q')
89
- expect(goal.actuals[0].cdr).to be_kind_of(Core::VariableRef)
91
+ expect(goal.actuals[0].cdr).to be_kind_of(Core::LogVarRef)
90
92
  expect(goal.actuals[0].cdr.name).to eq('d')
91
- expect(goal.actuals[1]).to be_kind_of(Core::ConsCell)
93
+ expect(goal.actuals[1]).to be_kind_of(Composite::ConsCell)
92
94
  expect(goal.actuals[1].to_s).to eq('(:a :c :o :r :n)')
93
95
  end
94
96
  end # context
@@ -1,10 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative '../spec_helper' # Use the RSpec framework
4
+ require_relative '../../lib/mini_kraken/atomic/k_symbol'
4
5
  require_relative '../../lib/mini_kraken/core/goal'
5
6
  require_relative '../../lib/mini_kraken/core/equals'
6
7
  require_relative '../../lib/mini_kraken/core/fail'
7
- require_relative '../../lib/mini_kraken/core/k_symbol'
8
8
  require_relative '../../lib/mini_kraken/core/succeed'
9
9
 
10
10
  # Load the class under test
@@ -14,8 +14,8 @@ require_relative '../../lib/mini_kraken/glue/fresh_env'
14
14
  module MiniKraken
15
15
  module Glue
16
16
  describe FreshEnv do
17
- let(:pea) { Core::KSymbol.new(:pea) }
18
- let(:pod) { Core::KSymbol.new(:pod) }
17
+ let(:pea) { Atomic::KSymbol.new(:pea) }
18
+ let(:pod) { Atomic::KSymbol.new(:pod) }
19
19
  let(:sample_goal) do
20
20
  Core::Goal.new(Core::Equals.instance, [pea, pod])
21
21
  end
@@ -13,6 +13,7 @@ require_relative '../../lib/mini_kraken/core/formal_ref'
13
13
  require_relative '../../lib/mini_kraken/core/goal_template'
14
14
  require_relative '../../lib/mini_kraken/core/succeed'
15
15
 
16
+ require_relative '../support/factory_atomic'
16
17
  require_relative '../support/factory_methods'
17
18
 
18
19
  # Load the class under test
@@ -22,6 +23,7 @@ require_relative '../../lib/mini_kraken/glue/run_star_expression'
22
23
  module MiniKraken
23
24
  module Glue
24
25
  describe RunStarExpression do
26
+ include MiniKraken::FactoryAtomic # Use mix-in module
25
27
  include FactoryMethods
26
28
 
27
29
  let(:pea) { k_symbol(:pea) }
@@ -70,15 +72,15 @@ module MiniKraken
70
72
  let(:split) { k_symbol(:split) }
71
73
  let(:tea) { k_symbol(:tea) }
72
74
  let(:virgin) { k_symbol(:virgin) }
73
- let(:ref_q) { Core::VariableRef.new('q') }
74
- let(:ref_r) { Core::VariableRef.new('r') }
75
- let(:ref_x) { Core::VariableRef.new('x') }
76
- let(:ref_y) { Core::VariableRef.new('y') }
77
- let(:ref_z) { Core::VariableRef.new('z') }
78
- let(:ref_s) { Core::VariableRef.new('s') }
79
- let(:ref_t) { Core::VariableRef.new('t') }
80
- let(:ref_u) { Core::VariableRef.new('u') }
81
- let(:ref_z) { Core::VariableRef.new('z') }
75
+ let(:ref_q) { Core::LogVarRef.new('q') }
76
+ let(:ref_r) { Core::LogVarRef.new('r') }
77
+ let(:ref_x) { Core::LogVarRef.new('x') }
78
+ let(:ref_y) { Core::LogVarRef.new('y') }
79
+ let(:ref_z) { Core::LogVarRef.new('z') }
80
+ let(:ref_s) { Core::LogVarRef.new('s') }
81
+ let(:ref_t) { Core::LogVarRef.new('t') }
82
+ let(:ref_u) { Core::LogVarRef.new('u') }
83
+ let(:ref_z) { Core::LogVarRef.new('z') }
82
84
  let(:t_ref) { Core::FormalRef.new('t') }
83
85
  let(:equals_tea) { Core::GoalTemplate.new(Core::Equals.instance, [tea, t_ref]) }
84
86
  let(:equals_cup) { Core::GoalTemplate.new(Core::Equals.instance, [cup, t_ref]) }
@@ -148,8 +150,8 @@ module MiniKraken
148
150
  end
149
151
 
150
152
  it 'should keep variable fresh when no unification occurs (II)' do
151
- ref1_q = Core::VariableRef.new('q')
152
- ref2_q = Core::VariableRef.new('q')
153
+ ref1_q = Core::LogVarRef.new('q')
154
+ ref2_q = Core::LogVarRef.new('q')
153
155
  goal = equals_goal(ref1_q, ref2_q)
154
156
  instance = RunStarExpression.new('q', goal)
155
157
 
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../../lib/mini_kraken/atomic/all_atomic'
4
+
5
+ module MiniKraken
6
+ # Mix-in module that provides convenience factory methods.
7
+ module FactoryAtomic
8
+ # Factory method for constructing a KBoolean instance
9
+ # @param aValue [Boolean]
10
+ # @return [Core::KBoolean]
11
+ def k_boolean(aValue)
12
+ Atomic::KBoolean.new(aValue)
13
+ end
14
+
15
+ # Factory method for constructing a KSymbol instance
16
+ # @param aSymbol [Symbol]
17
+ # @return [Core::KSymbol]
18
+ def k_symbol(aSymbol)
19
+ Atomic::KSymbol.new(aSymbol)
20
+ end
21
+ end # end
22
+ end # module
@@ -1,11 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative '../../lib/mini_kraken/core/any_value'
4
- require_relative '../../lib/mini_kraken/core/cons_cell'
5
- require_relative '../../lib/mini_kraken/core/k_boolean'
6
- require_relative '../../lib/mini_kraken/core/k_symbol'
7
- require_relative '../../lib/mini_kraken/core/variable'
8
- require_relative '../../lib/mini_kraken/core/variable_ref'
4
+ require_relative '../../lib/mini_kraken/atomic/all_atomic'
5
+ require_relative '../../lib/mini_kraken/composite/cons_cell'
6
+ require_relative '../../lib/mini_kraken/core/log_var'
7
+ require_relative '../../lib/mini_kraken/core/log_var_ref'
9
8
 
10
9
  module MiniKraken
11
10
  # Mix-in module that provides convenience factory methods.
@@ -24,7 +23,7 @@ module MiniKraken
24
23
  # @param obj2 [Term]
25
24
  # @return [Core::ConsCell]
26
25
  def cons(obj1, obj2 = nil)
27
- Core::ConsCell.new(obj1, obj2)
26
+ Composite::ConsCell.new(obj1, obj2)
28
27
  end
29
28
 
30
29
  # Factory method for constructing a goal using the Equals relation.
@@ -58,32 +57,18 @@ module MiniKraken
58
57
  Core::Goal.new(Core::Disj2.instance, [g1, g2])
59
58
  end
60
59
 
61
- # Factory method for constructing a KBoolean instance
62
- # @param aValue [Boolean]
63
- # @return [Core::KBoolean]
64
- def k_boolean(aValue)
65
- Core::KBoolean.new(aValue)
66
- end
67
-
68
- # Factory method for constructing a KSymbol instance
69
- # @param aSymbol [Symbol]
70
- # @return [Core::KSymbol]
71
- def k_symbol(aSymbol)
72
- Core::KSymbol.new(aSymbol)
73
- end
74
-
75
- # Factory method for constructing a Variable
60
+ # Factory method for constructing a LogVar
76
61
  # @param var_name [String]
77
- # @return [Core::Variable]
62
+ # @return [Core::LogVar]
78
63
  def variable(var_name)
79
- Core::Variable.new(var_name)
64
+ Core::LogVar.new(var_name)
80
65
  end
81
66
 
82
- # Factory method for constructing a VariableRef
67
+ # Factory method for constructing a LogVarRef
83
68
  # @param var_name [String]
84
- # @return [Core::VariableRef]
69
+ # @return [Core::LogVarRef]
85
70
  def var_ref(var_name)
86
- Core::VariableRef.new(var_name)
71
+ Core::LogVarRef.new(var_name)
87
72
  end
88
73
  end # end
89
74
  end # module
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mini_kraken
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.03
4
+ version: 0.2.04
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dimitri Geshef
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-09-02 00:00:00.000000000 Z
11
+ date: 2020-09-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -69,18 +69,22 @@ files:
69
69
  - README.md
70
70
  - Rakefile
71
71
  - lib/mini_kraken.rb
72
+ - lib/mini_kraken/atomic/all_atomic.rb
73
+ - lib/mini_kraken/atomic/atomic_term.rb
74
+ - lib/mini_kraken/atomic/k_boolean.rb
75
+ - lib/mini_kraken/atomic/k_integer.rb
76
+ - lib/mini_kraken/atomic/k_symbol.rb
77
+ - lib/mini_kraken/composite/composite_term.rb
78
+ - lib/mini_kraken/composite/cons_cell.rb
79
+ - lib/mini_kraken/composite/cons_cell_visitor.rb
72
80
  - lib/mini_kraken/core/any_value.rb
73
81
  - lib/mini_kraken/core/association.rb
74
82
  - lib/mini_kraken/core/association_walker.rb
75
- - lib/mini_kraken/core/atomic_term.rb
76
83
  - lib/mini_kraken/core/base_arg.rb
77
84
  - lib/mini_kraken/core/binary_relation.rb
78
85
  - lib/mini_kraken/core/composite_goal.rb
79
- - lib/mini_kraken/core/composite_term.rb
80
86
  - lib/mini_kraken/core/conde.rb
81
87
  - lib/mini_kraken/core/conj2.rb
82
- - lib/mini_kraken/core/cons_cell.rb
83
- - lib/mini_kraken/core/cons_cell_visitor.rb
84
88
  - lib/mini_kraken/core/def_relation.rb
85
89
  - lib/mini_kraken/core/designation.rb
86
90
  - lib/mini_kraken/core/disj2.rb
@@ -95,16 +99,14 @@ files:
95
99
  - lib/mini_kraken/core/goal_arg.rb
96
100
  - lib/mini_kraken/core/goal_relation.rb
97
101
  - lib/mini_kraken/core/goal_template.rb
98
- - lib/mini_kraken/core/k_boolean.rb
99
- - lib/mini_kraken/core/k_integer.rb
100
- - lib/mini_kraken/core/k_symbol.rb
102
+ - lib/mini_kraken/core/log_var.rb
103
+ - lib/mini_kraken/core/log_var_ref.rb
101
104
  - lib/mini_kraken/core/nullary_relation.rb
102
105
  - lib/mini_kraken/core/outcome.rb
103
106
  - lib/mini_kraken/core/relation.rb
104
107
  - lib/mini_kraken/core/succeed.rb
108
+ - lib/mini_kraken/core/tap.rb
105
109
  - lib/mini_kraken/core/term.rb
106
- - lib/mini_kraken/core/variable.rb
107
- - lib/mini_kraken/core/variable_ref.rb
108
110
  - lib/mini_kraken/core/vocabulary.rb
109
111
  - lib/mini_kraken/glue/dsl.rb
110
112
  - lib/mini_kraken/glue/fresh_env.rb
@@ -113,12 +115,15 @@ files:
113
115
  - lib/mini_kraken/version.rb
114
116
  - mini_kraken.gemspec
115
117
  - spec/.rubocop.yml
118
+ - spec/atomic/atomic_term_spec.rb
119
+ - spec/atomic/k_boolean_spec.rb
120
+ - spec/atomic/k_symbol_spec.rb
121
+ - spec/composite/cons_cell_spec.rb
122
+ - spec/composite/cons_cell_visitor_spec.rb
116
123
  - spec/core/association_spec.rb
117
124
  - spec/core/association_walker_spec.rb
118
125
  - spec/core/conde_spec.rb
119
126
  - spec/core/conj2_spec.rb
120
- - spec/core/cons_cell_spec.rb
121
- - spec/core/cons_cell_visitor_spec.rb
122
127
  - spec/core/def_relation_spec.rb
123
128
  - spec/core/disj2_spec.rb
124
129
  - spec/core/duck_fiber_spec.rb
@@ -127,12 +132,10 @@ files:
127
132
  - spec/core/fail_spec.rb
128
133
  - spec/core/goal_spec.rb
129
134
  - spec/core/goal_template_spec.rb
130
- - spec/core/k_boolean_spec.rb
131
- - spec/core/k_symbol_spec.rb
135
+ - spec/core/log_var_ref_spec.rb
136
+ - spec/core/log_var_spec.rb
132
137
  - spec/core/outcome_spec.rb
133
138
  - spec/core/succeed_spec.rb
134
- - spec/core/variable_ref_spec.rb
135
- - spec/core/variable_spec.rb
136
139
  - spec/core/vocabulary_spec.rb
137
140
  - spec/glue/dsl_chap1_spec.rb
138
141
  - spec/glue/dsl_chap2_spec.rb
@@ -141,6 +144,7 @@ files:
141
144
  - spec/glue/run_star_expression_spec.rb
142
145
  - spec/mini_kraken_spec.rb
143
146
  - spec/spec_helper.rb
147
+ - spec/support/factory_atomic.rb
144
148
  - spec/support/factory_methods.rb
145
149
  homepage: https://github.com/famished-tiger/mini_kraken
146
150
  licenses:
@@ -167,12 +171,15 @@ signing_key:
167
171
  specification_version: 4
168
172
  summary: Implementation of Minikanren language in Ruby. WIP
169
173
  test_files:
174
+ - spec/atomic/atomic_term_spec.rb
175
+ - spec/atomic/k_boolean_spec.rb
176
+ - spec/atomic/k_symbol_spec.rb
177
+ - spec/composite/cons_cell_spec.rb
178
+ - spec/composite/cons_cell_visitor_spec.rb
170
179
  - spec/core/association_spec.rb
171
180
  - spec/core/association_walker_spec.rb
172
181
  - spec/core/conde_spec.rb
173
182
  - spec/core/conj2_spec.rb
174
- - spec/core/cons_cell_spec.rb
175
- - spec/core/cons_cell_visitor_spec.rb
176
183
  - spec/core/def_relation_spec.rb
177
184
  - spec/core/disj2_spec.rb
178
185
  - spec/core/duck_fiber_spec.rb
@@ -181,12 +188,10 @@ test_files:
181
188
  - spec/core/fail_spec.rb
182
189
  - spec/core/goal_spec.rb
183
190
  - spec/core/goal_template_spec.rb
184
- - spec/core/k_boolean_spec.rb
185
- - spec/core/k_symbol_spec.rb
191
+ - spec/core/log_var_ref_spec.rb
192
+ - spec/core/log_var_spec.rb
186
193
  - spec/core/outcome_spec.rb
187
194
  - spec/core/succeed_spec.rb
188
- - spec/core/variable_ref_spec.rb
189
- - spec/core/variable_spec.rb
190
195
  - spec/core/vocabulary_spec.rb
191
196
  - spec/glue/dsl_chap1_spec.rb
192
197
  - spec/glue/dsl_chap2_spec.rb