mini_kraken 0.2.03 → 0.3.03

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 (136) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +378 -333
  3. data/CHANGELOG.md +48 -0
  4. data/README.md +29 -21
  5. data/lib/mini_kraken/atomic/all_atomic.rb +5 -0
  6. data/lib/mini_kraken/atomic/atomic_term.rb +96 -0
  7. data/lib/mini_kraken/atomic/k_boolean.rb +42 -0
  8. data/lib/mini_kraken/{core → atomic}/k_integer.rb +2 -5
  9. data/lib/mini_kraken/atomic/k_string.rb +17 -0
  10. data/lib/mini_kraken/{core → atomic}/k_symbol.rb +4 -8
  11. data/lib/mini_kraken/composite/all_composite.rb +4 -0
  12. data/lib/mini_kraken/composite/composite_term.rb +27 -0
  13. data/lib/mini_kraken/composite/cons_cell.rb +301 -0
  14. data/lib/mini_kraken/composite/cons_cell_visitor.rb +50 -0
  15. data/lib/mini_kraken/composite/list.rb +32 -0
  16. data/lib/mini_kraken/core/all_core.rb +8 -0
  17. data/lib/mini_kraken/core/any_value.rb +31 -7
  18. data/lib/mini_kraken/core/arity.rb +69 -0
  19. data/lib/mini_kraken/core/association.rb +29 -4
  20. data/lib/mini_kraken/core/association_copy.rb +50 -0
  21. data/lib/mini_kraken/core/base_term.rb +13 -0
  22. data/lib/mini_kraken/core/blackboard.rb +315 -0
  23. data/lib/mini_kraken/core/bookmark.rb +46 -0
  24. data/lib/mini_kraken/core/context.rb +492 -0
  25. data/lib/mini_kraken/core/duck_fiber.rb +21 -19
  26. data/lib/mini_kraken/core/entry.rb +40 -0
  27. data/lib/mini_kraken/core/fail.rb +20 -18
  28. data/lib/mini_kraken/core/fusion.rb +29 -0
  29. data/lib/mini_kraken/core/goal.rb +20 -29
  30. data/lib/mini_kraken/core/log_var.rb +22 -0
  31. data/lib/mini_kraken/core/log_var_ref.rb +108 -0
  32. data/lib/mini_kraken/core/nullary_relation.rb +2 -9
  33. data/lib/mini_kraken/core/parametrized_term.rb +68 -0
  34. data/lib/mini_kraken/core/relation.rb +14 -28
  35. data/lib/mini_kraken/core/scope.rb +67 -0
  36. data/lib/mini_kraken/core/solver_adapter.rb +58 -0
  37. data/lib/mini_kraken/core/specification.rb +48 -0
  38. data/lib/mini_kraken/core/succeed.rb +21 -17
  39. data/lib/mini_kraken/core/symbol_table.rb +137 -0
  40. data/lib/mini_kraken/core/term.rb +15 -4
  41. data/lib/mini_kraken/glue/dsl.rb +44 -88
  42. data/lib/mini_kraken/glue/run_star_expression.rb +28 -30
  43. data/lib/mini_kraken/rela/all_rela.rb +8 -0
  44. data/lib/mini_kraken/rela/binary_relation.rb +30 -0
  45. data/lib/mini_kraken/rela/conde.rb +143 -0
  46. data/lib/mini_kraken/rela/conj2.rb +65 -0
  47. data/lib/mini_kraken/rela/def_relation.rb +93 -0
  48. data/lib/mini_kraken/rela/disj2.rb +70 -0
  49. data/lib/mini_kraken/rela/fresh.rb +98 -0
  50. data/lib/mini_kraken/{core → rela}/goal_relation.rb +7 -9
  51. data/lib/mini_kraken/rela/unify.rb +265 -0
  52. data/lib/mini_kraken/version.rb +1 -1
  53. data/mini_kraken.gemspec +2 -2
  54. data/spec/.rubocop.yml +1 -1
  55. data/spec/atomic/atomic_term_spec.rb +98 -0
  56. data/spec/{core → atomic}/k_boolean_spec.rb +19 -34
  57. data/spec/{core → atomic}/k_symbol_spec.rb +3 -16
  58. data/spec/composite/cons_cell_spec.rb +225 -0
  59. data/spec/{core → composite}/cons_cell_visitor_spec.rb +36 -20
  60. data/spec/composite/list_spec.rb +50 -0
  61. data/spec/core/any_value_spec.rb +52 -0
  62. data/spec/core/arity_spec.rb +92 -0
  63. data/spec/core/association_copy_spec.rb +69 -0
  64. data/spec/core/association_spec.rb +31 -4
  65. data/spec/core/blackboard_spec.rb +287 -0
  66. data/spec/core/bookmark_spec.rb +40 -0
  67. data/spec/core/context_spec.rb +245 -0
  68. data/spec/core/core_spec.rb +40 -0
  69. data/spec/core/duck_fiber_spec.rb +16 -46
  70. data/spec/core/fail_spec.rb +5 -6
  71. data/spec/core/goal_spec.rb +22 -12
  72. data/spec/core/log_var_ref_spec.rb +105 -0
  73. data/spec/core/log_var_spec.rb +64 -0
  74. data/spec/core/nullary_relation_spec.rb +33 -0
  75. data/spec/core/parametrized_tem_spec.rb +39 -0
  76. data/spec/core/relation_spec.rb +33 -0
  77. data/spec/core/scope_spec.rb +73 -0
  78. data/spec/core/solver_adapter_spec.rb +70 -0
  79. data/spec/core/specification_spec.rb +43 -0
  80. data/spec/core/succeed_spec.rb +5 -5
  81. data/spec/core/symbol_table_spec.rb +142 -0
  82. data/spec/glue/dsl_chap1_spec.rb +88 -144
  83. data/spec/glue/dsl_chap2_spec.rb +454 -19
  84. data/spec/glue/run_star_expression_spec.rb +81 -906
  85. data/spec/rela/conde_spec.rb +153 -0
  86. data/spec/rela/conj2_spec.rb +123 -0
  87. data/spec/rela/def_relation_spec.rb +119 -0
  88. data/spec/rela/disj2_spec.rb +117 -0
  89. data/spec/rela/fresh_spec.rb +147 -0
  90. data/spec/rela/unify_spec.rb +369 -0
  91. data/spec/support/factory_atomic.rb +29 -0
  92. data/spec/support/factory_composite.rb +21 -0
  93. data/spec/support/factory_methods.rb +11 -26
  94. metadata +98 -70
  95. data/lib/mini_kraken/core/association_walker.rb +0 -183
  96. data/lib/mini_kraken/core/atomic_term.rb +0 -67
  97. data/lib/mini_kraken/core/base_arg.rb +0 -10
  98. data/lib/mini_kraken/core/binary_relation.rb +0 -63
  99. data/lib/mini_kraken/core/composite_goal.rb +0 -46
  100. data/lib/mini_kraken/core/composite_term.rb +0 -41
  101. data/lib/mini_kraken/core/conde.rb +0 -143
  102. data/lib/mini_kraken/core/conj2.rb +0 -79
  103. data/lib/mini_kraken/core/cons_cell.rb +0 -82
  104. data/lib/mini_kraken/core/cons_cell_visitor.rb +0 -102
  105. data/lib/mini_kraken/core/def_relation.rb +0 -53
  106. data/lib/mini_kraken/core/designation.rb +0 -55
  107. data/lib/mini_kraken/core/disj2.rb +0 -72
  108. data/lib/mini_kraken/core/environment.rb +0 -73
  109. data/lib/mini_kraken/core/equals.rb +0 -193
  110. data/lib/mini_kraken/core/formal_arg.rb +0 -22
  111. data/lib/mini_kraken/core/formal_ref.rb +0 -25
  112. data/lib/mini_kraken/core/freshness.rb +0 -45
  113. data/lib/mini_kraken/core/goal_arg.rb +0 -12
  114. data/lib/mini_kraken/core/goal_template.rb +0 -102
  115. data/lib/mini_kraken/core/k_boolean.rb +0 -35
  116. data/lib/mini_kraken/core/outcome.rb +0 -63
  117. data/lib/mini_kraken/core/variable.rb +0 -41
  118. data/lib/mini_kraken/core/variable_ref.rb +0 -84
  119. data/lib/mini_kraken/core/vocabulary.rb +0 -446
  120. data/lib/mini_kraken/glue/fresh_env.rb +0 -103
  121. data/lib/mini_kraken/glue/fresh_env_factory.rb +0 -83
  122. data/spec/core/association_walker_spec.rb +0 -192
  123. data/spec/core/conde_spec.rb +0 -147
  124. data/spec/core/conj2_spec.rb +0 -114
  125. data/spec/core/cons_cell_spec.rb +0 -107
  126. data/spec/core/def_relation_spec.rb +0 -97
  127. data/spec/core/disj2_spec.rb +0 -99
  128. data/spec/core/environment_spec.rb +0 -142
  129. data/spec/core/equals_spec.rb +0 -317
  130. data/spec/core/goal_template_spec.rb +0 -74
  131. data/spec/core/outcome_spec.rb +0 -56
  132. data/spec/core/variable_ref_spec.rb +0 -30
  133. data/spec/core/variable_spec.rb +0 -35
  134. data/spec/core/vocabulary_spec.rb +0 -219
  135. data/spec/glue/fresh_env_factory_spec.rb +0 -97
  136. data/spec/glue/fresh_env_spec.rb +0 -62
@@ -0,0 +1,29 @@
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 KString instance
16
+ # @param aString [String]
17
+ # @return [Core::KSymbol]
18
+ def k_string(aString)
19
+ Atomic::KString.new(aString)
20
+ end
21
+
22
+ # Factory method for constructing a KSymbol instance
23
+ # @param aSymbol [Symbol]
24
+ # @return [Core::KSymbol]
25
+ def k_symbol(aSymbol)
26
+ Atomic::KSymbol.new(aSymbol)
27
+ end
28
+ end # end
29
+ end # module
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../../lib/mini_kraken/composite/list'
4
+
5
+ module MiniKraken
6
+ # Mix-in module that provides convenience factory methods.
7
+ module FactoryComposite
8
+ # Factory method for constructing a ConsCell
9
+ # @param obj1 [Term]
10
+ # @param obj2 [Term]
11
+ # @return [Core::ConsCell]
12
+ def cons(obj1, obj2 = nil)
13
+ Composite::List.cons(obj1, obj2)
14
+ end
15
+
16
+ # Factory method that build a proper list with given elements
17
+ def make_list(*elems)
18
+ Composite::List.make_list(elems)
19
+ end
20
+ end # module
21
+ 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.3.03
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-12-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -52,7 +52,7 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '3.0'
55
- description: Implementation of Minikanren language in Ruby. WIP
55
+ description: Implementation of miniKanren language in Ruby. WIP
56
56
  email:
57
57
  - famished.tiger@yahoo.com
58
58
  executables: []
@@ -69,78 +69,96 @@ 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_string.rb
77
+ - lib/mini_kraken/atomic/k_symbol.rb
78
+ - lib/mini_kraken/composite/all_composite.rb
79
+ - lib/mini_kraken/composite/composite_term.rb
80
+ - lib/mini_kraken/composite/cons_cell.rb
81
+ - lib/mini_kraken/composite/cons_cell_visitor.rb
82
+ - lib/mini_kraken/composite/list.rb
83
+ - lib/mini_kraken/core/all_core.rb
72
84
  - lib/mini_kraken/core/any_value.rb
85
+ - lib/mini_kraken/core/arity.rb
73
86
  - lib/mini_kraken/core/association.rb
74
- - lib/mini_kraken/core/association_walker.rb
75
- - lib/mini_kraken/core/atomic_term.rb
76
- - lib/mini_kraken/core/base_arg.rb
77
- - lib/mini_kraken/core/binary_relation.rb
78
- - lib/mini_kraken/core/composite_goal.rb
79
- - lib/mini_kraken/core/composite_term.rb
80
- - lib/mini_kraken/core/conde.rb
81
- - lib/mini_kraken/core/conj2.rb
82
- - lib/mini_kraken/core/cons_cell.rb
83
- - lib/mini_kraken/core/cons_cell_visitor.rb
84
- - lib/mini_kraken/core/def_relation.rb
85
- - lib/mini_kraken/core/designation.rb
86
- - lib/mini_kraken/core/disj2.rb
87
+ - lib/mini_kraken/core/association_copy.rb
88
+ - lib/mini_kraken/core/base_term.rb
89
+ - lib/mini_kraken/core/blackboard.rb
90
+ - lib/mini_kraken/core/bookmark.rb
91
+ - lib/mini_kraken/core/context.rb
87
92
  - lib/mini_kraken/core/duck_fiber.rb
88
- - lib/mini_kraken/core/environment.rb
89
- - lib/mini_kraken/core/equals.rb
93
+ - lib/mini_kraken/core/entry.rb
90
94
  - lib/mini_kraken/core/fail.rb
91
- - lib/mini_kraken/core/formal_arg.rb
92
- - lib/mini_kraken/core/formal_ref.rb
93
- - lib/mini_kraken/core/freshness.rb
95
+ - lib/mini_kraken/core/fusion.rb
94
96
  - lib/mini_kraken/core/goal.rb
95
- - lib/mini_kraken/core/goal_arg.rb
96
- - lib/mini_kraken/core/goal_relation.rb
97
- - 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
97
+ - lib/mini_kraken/core/log_var.rb
98
+ - lib/mini_kraken/core/log_var_ref.rb
101
99
  - lib/mini_kraken/core/nullary_relation.rb
102
- - lib/mini_kraken/core/outcome.rb
100
+ - lib/mini_kraken/core/parametrized_term.rb
103
101
  - lib/mini_kraken/core/relation.rb
102
+ - lib/mini_kraken/core/scope.rb
103
+ - lib/mini_kraken/core/solver_adapter.rb
104
+ - lib/mini_kraken/core/specification.rb
104
105
  - lib/mini_kraken/core/succeed.rb
106
+ - lib/mini_kraken/core/symbol_table.rb
105
107
  - lib/mini_kraken/core/term.rb
106
- - lib/mini_kraken/core/variable.rb
107
- - lib/mini_kraken/core/variable_ref.rb
108
- - lib/mini_kraken/core/vocabulary.rb
109
108
  - lib/mini_kraken/glue/dsl.rb
110
- - lib/mini_kraken/glue/fresh_env.rb
111
- - lib/mini_kraken/glue/fresh_env_factory.rb
112
109
  - lib/mini_kraken/glue/run_star_expression.rb
110
+ - lib/mini_kraken/rela/all_rela.rb
111
+ - lib/mini_kraken/rela/binary_relation.rb
112
+ - lib/mini_kraken/rela/conde.rb
113
+ - lib/mini_kraken/rela/conj2.rb
114
+ - lib/mini_kraken/rela/def_relation.rb
115
+ - lib/mini_kraken/rela/disj2.rb
116
+ - lib/mini_kraken/rela/fresh.rb
117
+ - lib/mini_kraken/rela/goal_relation.rb
118
+ - lib/mini_kraken/rela/unify.rb
113
119
  - lib/mini_kraken/version.rb
114
120
  - mini_kraken.gemspec
115
121
  - spec/.rubocop.yml
122
+ - spec/atomic/atomic_term_spec.rb
123
+ - spec/atomic/k_boolean_spec.rb
124
+ - spec/atomic/k_symbol_spec.rb
125
+ - spec/composite/cons_cell_spec.rb
126
+ - spec/composite/cons_cell_visitor_spec.rb
127
+ - spec/composite/list_spec.rb
128
+ - spec/core/any_value_spec.rb
129
+ - spec/core/arity_spec.rb
130
+ - spec/core/association_copy_spec.rb
116
131
  - spec/core/association_spec.rb
117
- - spec/core/association_walker_spec.rb
118
- - spec/core/conde_spec.rb
119
- - spec/core/conj2_spec.rb
120
- - spec/core/cons_cell_spec.rb
121
- - spec/core/cons_cell_visitor_spec.rb
122
- - spec/core/def_relation_spec.rb
123
- - spec/core/disj2_spec.rb
132
+ - spec/core/blackboard_spec.rb
133
+ - spec/core/bookmark_spec.rb
134
+ - spec/core/context_spec.rb
135
+ - spec/core/core_spec.rb
124
136
  - spec/core/duck_fiber_spec.rb
125
- - spec/core/environment_spec.rb
126
- - spec/core/equals_spec.rb
127
137
  - spec/core/fail_spec.rb
128
138
  - spec/core/goal_spec.rb
129
- - spec/core/goal_template_spec.rb
130
- - spec/core/k_boolean_spec.rb
131
- - spec/core/k_symbol_spec.rb
132
- - spec/core/outcome_spec.rb
139
+ - spec/core/log_var_ref_spec.rb
140
+ - spec/core/log_var_spec.rb
141
+ - spec/core/nullary_relation_spec.rb
142
+ - spec/core/parametrized_tem_spec.rb
143
+ - spec/core/relation_spec.rb
144
+ - spec/core/scope_spec.rb
145
+ - spec/core/solver_adapter_spec.rb
146
+ - spec/core/specification_spec.rb
133
147
  - spec/core/succeed_spec.rb
134
- - spec/core/variable_ref_spec.rb
135
- - spec/core/variable_spec.rb
136
- - spec/core/vocabulary_spec.rb
148
+ - spec/core/symbol_table_spec.rb
137
149
  - spec/glue/dsl_chap1_spec.rb
138
150
  - spec/glue/dsl_chap2_spec.rb
139
- - spec/glue/fresh_env_factory_spec.rb
140
- - spec/glue/fresh_env_spec.rb
141
151
  - spec/glue/run_star_expression_spec.rb
142
152
  - spec/mini_kraken_spec.rb
153
+ - spec/rela/conde_spec.rb
154
+ - spec/rela/conj2_spec.rb
155
+ - spec/rela/def_relation_spec.rb
156
+ - spec/rela/disj2_spec.rb
157
+ - spec/rela/fresh_spec.rb
158
+ - spec/rela/unify_spec.rb
143
159
  - spec/spec_helper.rb
160
+ - spec/support/factory_atomic.rb
161
+ - spec/support/factory_composite.rb
144
162
  - spec/support/factory_methods.rb
145
163
  homepage: https://github.com/famished-tiger/mini_kraken
146
164
  licenses:
@@ -165,32 +183,42 @@ requirements: []
165
183
  rubygems_version: 3.0.3
166
184
  signing_key:
167
185
  specification_version: 4
168
- summary: Implementation of Minikanren language in Ruby. WIP
186
+ summary: Implementation of miniKanren language in Ruby. WIP
169
187
  test_files:
188
+ - spec/atomic/atomic_term_spec.rb
189
+ - spec/atomic/k_boolean_spec.rb
190
+ - spec/atomic/k_symbol_spec.rb
191
+ - spec/composite/cons_cell_spec.rb
192
+ - spec/composite/cons_cell_visitor_spec.rb
193
+ - spec/composite/list_spec.rb
194
+ - spec/core/any_value_spec.rb
195
+ - spec/core/arity_spec.rb
196
+ - spec/core/association_copy_spec.rb
170
197
  - spec/core/association_spec.rb
171
- - spec/core/association_walker_spec.rb
172
- - spec/core/conde_spec.rb
173
- - spec/core/conj2_spec.rb
174
- - spec/core/cons_cell_spec.rb
175
- - spec/core/cons_cell_visitor_spec.rb
176
- - spec/core/def_relation_spec.rb
177
- - spec/core/disj2_spec.rb
198
+ - spec/core/blackboard_spec.rb
199
+ - spec/core/bookmark_spec.rb
200
+ - spec/core/context_spec.rb
201
+ - spec/core/core_spec.rb
178
202
  - spec/core/duck_fiber_spec.rb
179
- - spec/core/environment_spec.rb
180
- - spec/core/equals_spec.rb
181
203
  - spec/core/fail_spec.rb
182
204
  - spec/core/goal_spec.rb
183
- - spec/core/goal_template_spec.rb
184
- - spec/core/k_boolean_spec.rb
185
- - spec/core/k_symbol_spec.rb
186
- - spec/core/outcome_spec.rb
205
+ - spec/core/log_var_ref_spec.rb
206
+ - spec/core/log_var_spec.rb
207
+ - spec/core/nullary_relation_spec.rb
208
+ - spec/core/parametrized_tem_spec.rb
209
+ - spec/core/relation_spec.rb
210
+ - spec/core/scope_spec.rb
211
+ - spec/core/solver_adapter_spec.rb
212
+ - spec/core/specification_spec.rb
187
213
  - spec/core/succeed_spec.rb
188
- - spec/core/variable_ref_spec.rb
189
- - spec/core/variable_spec.rb
190
- - spec/core/vocabulary_spec.rb
214
+ - spec/core/symbol_table_spec.rb
191
215
  - spec/glue/dsl_chap1_spec.rb
192
216
  - spec/glue/dsl_chap2_spec.rb
193
- - spec/glue/fresh_env_factory_spec.rb
194
- - spec/glue/fresh_env_spec.rb
195
217
  - spec/glue/run_star_expression_spec.rb
196
218
  - spec/mini_kraken_spec.rb
219
+ - spec/rela/conde_spec.rb
220
+ - spec/rela/conj2_spec.rb
221
+ - spec/rela/def_relation_spec.rb
222
+ - spec/rela/disj2_spec.rb
223
+ - spec/rela/fresh_spec.rb
224
+ - spec/rela/unify_spec.rb
@@ -1,183 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'set'
4
- require_relative 'atomic_term'
5
- require_relative 'cons_cell'
6
-
7
- module MiniKraken
8
- module Core
9
- class AssociationWalker
10
- attr_reader :visitees
11
-
12
- def initialize
13
- @visitees = Set.new
14
- end
15
-
16
- # @param aName [String]
17
- # @param anEnv [Vocabulary]
18
- # @return [Term, NilClass]
19
- def find_ground(aName, anEnv)
20
- # require 'debug'
21
- assocs = anEnv[aName]
22
- walk_assocs(assocs, anEnv)
23
- end
24
-
25
- def walk_assocs(assocs, anEnv)
26
- # Treat easy cases first...
27
- return nil if assocs.empty?
28
-
29
- assoc_atomic = assocs.find { |assc| assc.value.kind_of?(AtomicTerm) }
30
- return assoc_atomic.value if assoc_atomic
31
-
32
- result = nil
33
- assocs.each do |assc|
34
- unless visitees.include?(assc)
35
- visitees.add(assc)
36
- sub_result = walk_value(assc.value, anEnv)
37
- if sub_result
38
- result = sub_result
39
- break
40
- end
41
- end
42
- end
43
-
44
- result
45
- end
46
-
47
- def walk_value(aTerm, anEnv)
48
- return aTerm if aTerm.kind_of?(AtomicTerm) || aTerm.kind_of?(AnyValue)
49
-
50
- result = nil
51
-
52
- if aTerm.kind_of?(CompositeTerm)
53
- children = aTerm.children.compact
54
- walk_results = children.map do |child|
55
- walk_value(child, anEnv)
56
- end
57
- result = aTerm unless walk_results.any?(&:nil?)
58
- else # VariableRef or Variable
59
- name = aTerm.respond_to?(:name) ? aTerm.name : aTerm.var_name
60
- result = find_ground(name, anEnv)
61
- end
62
-
63
- result
64
- end
65
-
66
- # A composite term is fresh when all its members are nil or all non-nil members
67
- # are all fresh.
68
- # A composite term is bound when it is not fresh and not ground
69
- # A composite term is a ground term when all its non-nil members are ground.
70
- # @param aTerm [Term]
71
- # @param anEnv [Vocabulary]
72
- # @return [Freshness]
73
- def determine_freshness(aTerm, anEnv)
74
- # require 'debug'
75
- result = nil
76
-
77
- if aTerm.kind_of?(AtomicTerm)
78
- result = Freshness.new(:ground, aTerm)
79
- elsif aTerm.kind_of?(CompositeTerm)
80
- children = aTerm.children.compact
81
- walk_results = children.map { |chd| determine_freshness(chd, anEnv) }
82
-
83
- degree = nil
84
- if walk_results.all?(&:fresh?)
85
- degree = :fresh
86
- elsif walk_results.all?(&:ground?)
87
- degree = :ground
88
- else
89
- degree = :bound
90
- end
91
- result = Freshness.new(degree, aTerm)
92
- else # VariableRef or Variable
93
- name = aTerm.respond_to?(:name) ? aTerm.name : aTerm.var_name
94
- assocs = anEnv[name]
95
- if assocs.empty?
96
- result = Freshness.new(:fresh, nil)
97
- else
98
- result = freshness_associated(assocs, anEnv)
99
- end
100
- end
101
-
102
- result
103
- end
104
-
105
- def freshness_associated(assocs, anEnv)
106
- assoc_atomic = assocs.find { |assc| assc.value.kind_of?(AtomicTerm) }
107
- return Freshness.new(:ground, assoc_atomic.value) if assoc_atomic
108
-
109
- raw_results = assocs.map do |assc|
110
- unless visitees.include?(assc)
111
- visitees.add(assc)
112
- determine_freshness(assc.value, anEnv)
113
- end
114
- end
115
-
116
- raw_results.compact!
117
- result = nil
118
- if raw_results.all?(&:fresh?)
119
- # TODO: What if multiple bindings?...
120
- result = Freshness.new(:bound, assocs[0].value)
121
- elsif raw_results.any?(&:ground?)
122
- ground_value = raw_results.find(&:ground?).associated
123
- result = Freshness.new(:ground, ground_value)
124
- else
125
- # TODO: What if multiple bindings?...
126
- result = Freshness.new(:bound, raw_results[0].associated)
127
- end
128
-
129
- result
130
- end
131
-
132
- def quote_term(aTerm, anEnv)
133
- # require 'debug'
134
- result = nil
135
-
136
- if aTerm.kind_of?(AtomicTerm)
137
- result = aTerm.quote(anEnv)
138
- elsif aTerm.kind_of?(ConsCell)
139
- result = aTerm.quote(anEnv)
140
- else # VariableRef or Variable
141
- name = aTerm.respond_to?(:name) ? aTerm.name : aTerm.var_name
142
- assocs = anEnv[name]
143
- if assocs.empty?
144
- result = nil
145
- else
146
- result = quote_associated(assocs, anEnv)
147
- end
148
- end
149
-
150
- result
151
- end
152
-
153
- def quote_associated(assocs, anEnv)
154
- assoc_atomic = assocs.find { |assc| assc.value.kind_of?(AtomicTerm) }
155
- return assoc_atomic.value if assoc_atomic
156
-
157
- raw_results = assocs.map do |assc|
158
- unless visitees.include?(assc)
159
- visitees.add(assc)
160
- quote_term(assc.value, anEnv)
161
- end
162
- end
163
-
164
- raw_results.compact!
165
- result = nil
166
- if raw_results.empty?
167
- result = nil
168
- elsif raw_results.all? { |res| res.fresh?(anEnv) }
169
- # TODO: What if multiple bindings?...
170
- result = quote_term(assocs[0].value, anEnv)
171
- elsif raw_results.any? { |res| res.ground?(anEnv) }
172
- ground_res = raw_results.find { |res| res.ground?(anEnv) }
173
- result = quote_term(ground_res, anEnv)
174
- else
175
- # TODO: What if multiple bindings?...
176
- result = quote_term(raw_results[0], anEnv)
177
- end
178
-
179
- result
180
- end
181
- end # class
182
- end # module
183
- end # module