mini_kraken 0.2.02 → 0.3.02
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.
- checksums.yaml +4 -4
- data/.rubocop.yml +378 -333
- data/CHANGELOG.md +52 -0
- data/README.md +19 -19
- data/lib/mini_kraken.rb +0 -1
- data/lib/mini_kraken/atomic/all_atomic.rb +5 -0
- data/lib/mini_kraken/atomic/atomic_term.rb +96 -0
- data/lib/mini_kraken/atomic/k_boolean.rb +42 -0
- data/lib/mini_kraken/{core → atomic}/k_integer.rb +2 -5
- data/lib/mini_kraken/atomic/k_string.rb +17 -0
- data/lib/mini_kraken/{core → atomic}/k_symbol.rb +4 -8
- data/lib/mini_kraken/composite/all_composite.rb +4 -0
- data/lib/mini_kraken/composite/composite_term.rb +27 -0
- data/lib/mini_kraken/composite/cons_cell.rb +299 -0
- data/lib/mini_kraken/composite/cons_cell_visitor.rb +50 -0
- data/lib/mini_kraken/composite/list.rb +32 -0
- data/lib/mini_kraken/core/all_core.rb +8 -0
- data/lib/mini_kraken/core/any_value.rb +31 -7
- data/lib/mini_kraken/core/arity.rb +69 -0
- data/lib/mini_kraken/core/association.rb +29 -4
- data/lib/mini_kraken/core/association_copy.rb +50 -0
- data/lib/mini_kraken/core/base_term.rb +13 -0
- data/lib/mini_kraken/core/blackboard.rb +315 -0
- data/lib/mini_kraken/core/bookmark.rb +46 -0
- data/lib/mini_kraken/core/context.rb +492 -0
- data/lib/mini_kraken/core/duck_fiber.rb +21 -19
- data/lib/mini_kraken/core/entry.rb +40 -0
- data/lib/mini_kraken/core/fail.rb +20 -18
- data/lib/mini_kraken/core/fusion.rb +29 -0
- data/lib/mini_kraken/core/goal.rb +20 -29
- data/lib/mini_kraken/core/log_var.rb +22 -0
- data/lib/mini_kraken/core/log_var_ref.rb +108 -0
- data/lib/mini_kraken/core/nullary_relation.rb +2 -9
- data/lib/mini_kraken/core/parametrized_term.rb +61 -0
- data/lib/mini_kraken/core/relation.rb +14 -28
- data/lib/mini_kraken/core/scope.rb +67 -0
- data/lib/mini_kraken/core/solver_adapter.rb +58 -0
- data/lib/mini_kraken/core/specification.rb +48 -0
- data/lib/mini_kraken/core/succeed.rb +21 -17
- data/lib/mini_kraken/core/symbol_table.rb +137 -0
- data/lib/mini_kraken/core/term.rb +15 -4
- data/lib/mini_kraken/glue/dsl.rb +45 -81
- data/lib/mini_kraken/glue/run_star_expression.rb +28 -30
- data/lib/mini_kraken/rela/all_rela.rb +8 -0
- data/lib/mini_kraken/rela/binary_relation.rb +30 -0
- data/lib/mini_kraken/rela/conde.rb +143 -0
- data/lib/mini_kraken/rela/conj2.rb +65 -0
- data/lib/mini_kraken/rela/def_relation.rb +93 -0
- data/lib/mini_kraken/rela/disj2.rb +70 -0
- data/lib/mini_kraken/rela/fresh.rb +98 -0
- data/lib/mini_kraken/{core → rela}/goal_relation.rb +7 -9
- data/lib/mini_kraken/rela/unify.rb +258 -0
- data/lib/mini_kraken/version.rb +1 -1
- data/mini_kraken.gemspec +2 -2
- data/spec/.rubocop.yml +1 -1
- data/spec/atomic/atomic_term_spec.rb +98 -0
- data/spec/{core → atomic}/k_boolean_spec.rb +19 -34
- data/spec/{core → atomic}/k_symbol_spec.rb +3 -16
- data/spec/composite/cons_cell_spec.rb +225 -0
- data/spec/composite/cons_cell_visitor_spec.rb +158 -0
- data/spec/composite/list_spec.rb +50 -0
- data/spec/core/any_value_spec.rb +52 -0
- data/spec/core/arity_spec.rb +92 -0
- data/spec/core/association_copy_spec.rb +69 -0
- data/spec/core/association_spec.rb +31 -4
- data/spec/core/blackboard_spec.rb +287 -0
- data/spec/core/bookmark_spec.rb +40 -0
- data/spec/core/context_spec.rb +245 -0
- data/spec/core/core_spec.rb +40 -0
- data/spec/core/duck_fiber_spec.rb +16 -46
- data/spec/core/fail_spec.rb +5 -6
- data/spec/core/goal_spec.rb +24 -14
- data/spec/core/log_var_ref_spec.rb +105 -0
- data/spec/core/log_var_spec.rb +64 -0
- data/spec/core/nullary_relation_spec.rb +33 -0
- data/spec/core/parametrized_tem_spec.rb +39 -0
- data/spec/core/relation_spec.rb +33 -0
- data/spec/core/scope_spec.rb +73 -0
- data/spec/core/solver_adapter_spec.rb +70 -0
- data/spec/core/specification_spec.rb +43 -0
- data/spec/core/succeed_spec.rb +5 -5
- data/spec/core/symbol_table_spec.rb +142 -0
- data/spec/glue/dsl_chap1_spec.rb +96 -144
- data/spec/glue/dsl_chap2_spec.rb +350 -0
- data/spec/glue/run_star_expression_spec.rb +82 -906
- data/spec/rela/conde_spec.rb +153 -0
- data/spec/rela/conj2_spec.rb +123 -0
- data/spec/rela/def_relation_spec.rb +119 -0
- data/spec/rela/disj2_spec.rb +117 -0
- data/spec/rela/fresh_spec.rb +147 -0
- data/spec/rela/unify_spec.rb +369 -0
- data/spec/support/factory_atomic.rb +29 -0
- data/spec/support/factory_composite.rb +21 -0
- data/spec/support/factory_methods.rb +11 -26
- metadata +100 -64
- data/lib/mini_kraken/core/association_walker.rb +0 -183
- data/lib/mini_kraken/core/atomic_term.rb +0 -67
- data/lib/mini_kraken/core/base_arg.rb +0 -10
- data/lib/mini_kraken/core/binary_relation.rb +0 -63
- data/lib/mini_kraken/core/composite_goal.rb +0 -46
- data/lib/mini_kraken/core/composite_term.rb +0 -41
- data/lib/mini_kraken/core/conde.rb +0 -143
- data/lib/mini_kraken/core/conj2.rb +0 -79
- data/lib/mini_kraken/core/cons_cell.rb +0 -82
- data/lib/mini_kraken/core/def_relation.rb +0 -50
- data/lib/mini_kraken/core/designation.rb +0 -55
- data/lib/mini_kraken/core/disj2.rb +0 -72
- data/lib/mini_kraken/core/environment.rb +0 -73
- data/lib/mini_kraken/core/equals.rb +0 -156
- data/lib/mini_kraken/core/formal_arg.rb +0 -22
- data/lib/mini_kraken/core/formal_ref.rb +0 -25
- data/lib/mini_kraken/core/freshness.rb +0 -45
- data/lib/mini_kraken/core/goal_arg.rb +0 -12
- data/lib/mini_kraken/core/goal_template.rb +0 -62
- data/lib/mini_kraken/core/k_boolean.rb +0 -35
- data/lib/mini_kraken/core/outcome.rb +0 -53
- data/lib/mini_kraken/core/variable.rb +0 -41
- data/lib/mini_kraken/core/variable_ref.rb +0 -78
- data/lib/mini_kraken/core/vocabulary.rb +0 -442
- data/lib/mini_kraken/glue/fresh_env.rb +0 -75
- data/spec/core/association_walker_spec.rb +0 -192
- data/spec/core/conde_spec.rb +0 -147
- data/spec/core/conj2_spec.rb +0 -114
- data/spec/core/cons_cell_spec.rb +0 -107
- data/spec/core/def_relation_spec.rb +0 -96
- data/spec/core/disj2_spec.rb +0 -99
- data/spec/core/environment_spec.rb +0 -142
- data/spec/core/equals_spec.rb +0 -304
- data/spec/core/goal_template_spec.rb +0 -74
- data/spec/core/outcome_spec.rb +0 -48
- data/spec/core/variable_ref_spec.rb +0 -27
- data/spec/core/variable_spec.rb +0 -35
- data/spec/core/vocabulary_spec.rb +0 -219
- 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/
|
5
|
-
require_relative '../../lib/mini_kraken/
|
6
|
-
require_relative '../../lib/mini_kraken/core/
|
7
|
-
require_relative '../../lib/mini_kraken/core/
|
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
|
-
|
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
|
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::
|
62
|
+
# @return [Core::LogVar]
|
78
63
|
def variable(var_name)
|
79
|
-
Core::
|
64
|
+
Core::LogVar.new(var_name)
|
80
65
|
end
|
81
66
|
|
82
|
-
# Factory method for constructing a
|
67
|
+
# Factory method for constructing a LogVarRef
|
83
68
|
# @param var_name [String]
|
84
|
-
# @return [Core::
|
69
|
+
# @return [Core::LogVarRef]
|
85
70
|
def var_ref(var_name)
|
86
|
-
Core::
|
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.
|
4
|
+
version: 0.3.02
|
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-
|
11
|
+
date: 2020-12-19 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
|
55
|
+
description: Implementation of miniKanren language in Ruby. WIP
|
56
56
|
email:
|
57
57
|
- famished.tiger@yahoo.com
|
58
58
|
executables: []
|
@@ -69,73 +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/
|
75
|
-
- lib/mini_kraken/core/
|
76
|
-
- lib/mini_kraken/core/
|
77
|
-
- lib/mini_kraken/core/
|
78
|
-
- lib/mini_kraken/core/
|
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/def_relation.rb
|
84
|
-
- lib/mini_kraken/core/designation.rb
|
85
|
-
- 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
|
86
92
|
- lib/mini_kraken/core/duck_fiber.rb
|
87
|
-
- lib/mini_kraken/core/
|
88
|
-
- lib/mini_kraken/core/equals.rb
|
93
|
+
- lib/mini_kraken/core/entry.rb
|
89
94
|
- lib/mini_kraken/core/fail.rb
|
90
|
-
- lib/mini_kraken/core/
|
91
|
-
- lib/mini_kraken/core/formal_ref.rb
|
92
|
-
- lib/mini_kraken/core/freshness.rb
|
95
|
+
- lib/mini_kraken/core/fusion.rb
|
93
96
|
- lib/mini_kraken/core/goal.rb
|
94
|
-
- lib/mini_kraken/core/
|
95
|
-
- lib/mini_kraken/core/
|
96
|
-
- lib/mini_kraken/core/goal_template.rb
|
97
|
-
- lib/mini_kraken/core/k_boolean.rb
|
98
|
-
- lib/mini_kraken/core/k_integer.rb
|
99
|
-
- lib/mini_kraken/core/k_symbol.rb
|
97
|
+
- lib/mini_kraken/core/log_var.rb
|
98
|
+
- lib/mini_kraken/core/log_var_ref.rb
|
100
99
|
- lib/mini_kraken/core/nullary_relation.rb
|
101
|
-
- lib/mini_kraken/core/
|
100
|
+
- lib/mini_kraken/core/parametrized_term.rb
|
102
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
|
103
105
|
- lib/mini_kraken/core/succeed.rb
|
106
|
+
- lib/mini_kraken/core/symbol_table.rb
|
104
107
|
- lib/mini_kraken/core/term.rb
|
105
|
-
- lib/mini_kraken/core/variable.rb
|
106
|
-
- lib/mini_kraken/core/variable_ref.rb
|
107
|
-
- lib/mini_kraken/core/vocabulary.rb
|
108
108
|
- lib/mini_kraken/glue/dsl.rb
|
109
|
-
- lib/mini_kraken/glue/fresh_env.rb
|
110
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
|
111
119
|
- lib/mini_kraken/version.rb
|
112
120
|
- mini_kraken.gemspec
|
113
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
|
114
131
|
- spec/core/association_spec.rb
|
115
|
-
- spec/core/
|
116
|
-
- spec/core/
|
117
|
-
- spec/core/
|
118
|
-
- spec/core/
|
119
|
-
- spec/core/def_relation_spec.rb
|
120
|
-
- 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
|
121
136
|
- spec/core/duck_fiber_spec.rb
|
122
|
-
- spec/core/environment_spec.rb
|
123
|
-
- spec/core/equals_spec.rb
|
124
137
|
- spec/core/fail_spec.rb
|
125
138
|
- spec/core/goal_spec.rb
|
126
|
-
- spec/core/
|
127
|
-
- spec/core/
|
128
|
-
- spec/core/
|
129
|
-
- spec/core/
|
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
|
130
147
|
- spec/core/succeed_spec.rb
|
131
|
-
- spec/core/
|
132
|
-
- spec/core/variable_spec.rb
|
133
|
-
- spec/core/vocabulary_spec.rb
|
148
|
+
- spec/core/symbol_table_spec.rb
|
134
149
|
- spec/glue/dsl_chap1_spec.rb
|
135
|
-
- spec/glue/
|
150
|
+
- spec/glue/dsl_chap2_spec.rb
|
136
151
|
- spec/glue/run_star_expression_spec.rb
|
137
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
|
138
159
|
- spec/spec_helper.rb
|
160
|
+
- spec/support/factory_atomic.rb
|
161
|
+
- spec/support/factory_composite.rb
|
139
162
|
- spec/support/factory_methods.rb
|
140
163
|
homepage: https://github.com/famished-tiger/mini_kraken
|
141
164
|
licenses:
|
@@ -160,29 +183,42 @@ requirements: []
|
|
160
183
|
rubygems_version: 3.0.3
|
161
184
|
signing_key:
|
162
185
|
specification_version: 4
|
163
|
-
summary: Implementation of
|
186
|
+
summary: Implementation of miniKanren language in Ruby. WIP
|
164
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
|
165
197
|
- spec/core/association_spec.rb
|
166
|
-
- spec/core/
|
167
|
-
- spec/core/
|
168
|
-
- spec/core/
|
169
|
-
- spec/core/
|
170
|
-
- spec/core/def_relation_spec.rb
|
171
|
-
- 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
|
172
202
|
- spec/core/duck_fiber_spec.rb
|
173
|
-
- spec/core/environment_spec.rb
|
174
|
-
- spec/core/equals_spec.rb
|
175
203
|
- spec/core/fail_spec.rb
|
176
204
|
- spec/core/goal_spec.rb
|
177
|
-
- spec/core/
|
178
|
-
- spec/core/
|
179
|
-
- spec/core/
|
180
|
-
- spec/core/
|
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
|
181
213
|
- spec/core/succeed_spec.rb
|
182
|
-
- spec/core/
|
183
|
-
- spec/core/variable_spec.rb
|
184
|
-
- spec/core/vocabulary_spec.rb
|
214
|
+
- spec/core/symbol_table_spec.rb
|
185
215
|
- spec/glue/dsl_chap1_spec.rb
|
186
|
-
- spec/glue/
|
216
|
+
- spec/glue/dsl_chap2_spec.rb
|
187
217
|
- spec/glue/run_star_expression_spec.rb
|
188
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
|