mini_kraken 0.2.03 → 0.2.04

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