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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +9 -0
- data/lib/mini_kraken/atomic/all_atomic.rb +4 -0
- data/lib/mini_kraken/{core → atomic}/atomic_term.rb +23 -9
- data/lib/mini_kraken/atomic/k_boolean.rb +42 -0
- data/lib/mini_kraken/{core → atomic}/k_integer.rb +2 -1
- data/lib/mini_kraken/{core → atomic}/k_symbol.rb +5 -3
- data/lib/mini_kraken/{core → composite}/composite_term.rb +6 -4
- data/lib/mini_kraken/composite/cons_cell.rb +132 -0
- data/lib/mini_kraken/{core → composite}/cons_cell_visitor.rb +1 -1
- data/lib/mini_kraken/core/association_walker.rb +14 -14
- data/lib/mini_kraken/core/binary_relation.rb +10 -10
- data/lib/mini_kraken/core/equals.rb +159 -161
- data/lib/mini_kraken/core/goal_relation.rb +2 -2
- data/lib/mini_kraken/core/goal_template.rb +7 -7
- data/lib/mini_kraken/core/{variable.rb → log_var.rb} +10 -3
- data/lib/mini_kraken/core/{variable_ref.rb → log_var_ref.rb} +3 -3
- data/lib/mini_kraken/core/tap.rb +46 -0
- data/lib/mini_kraken/core/vocabulary.rb +8 -8
- data/lib/mini_kraken/glue/dsl.rb +21 -17
- data/lib/mini_kraken/glue/fresh_env.rb +7 -2
- data/lib/mini_kraken/glue/fresh_env_factory.rb +1 -1
- data/lib/mini_kraken/glue/run_star_expression.rb +2 -2
- data/lib/mini_kraken/version.rb +1 -1
- data/spec/.rubocop.yml +1 -1
- data/spec/atomic/atomic_term_spec.rb +94 -0
- data/spec/{core → atomic}/k_boolean_spec.rb +19 -34
- data/spec/{core → atomic}/k_symbol_spec.rb +3 -11
- data/spec/{core → composite}/cons_cell_spec.rb +10 -8
- data/spec/{core → composite}/cons_cell_visitor_spec.rb +11 -10
- data/spec/core/association_spec.rb +6 -4
- data/spec/core/association_walker_spec.rb +8 -6
- data/spec/core/conde_spec.rb +19 -17
- data/spec/core/conj2_spec.rb +10 -8
- data/spec/core/def_relation_spec.rb +9 -7
- data/spec/core/disj2_spec.rb +11 -10
- data/spec/core/environment_spec.rb +12 -10
- data/spec/core/equals_spec.rb +12 -10
- data/spec/core/goal_spec.rb +6 -5
- data/spec/core/goal_template_spec.rb +5 -5
- data/spec/core/{variable_ref_spec.rb → log_var_ref_spec.rb} +4 -4
- data/spec/core/{variable_spec.rb → log_var_spec.rb} +4 -4
- data/spec/core/vocabulary_spec.rb +12 -11
- data/spec/glue/dsl_chap1_spec.rb +0 -45
- data/spec/glue/dsl_chap2_spec.rb +115 -7
- data/spec/glue/fresh_env_factory_spec.rb +11 -9
- data/spec/glue/fresh_env_spec.rb +3 -3
- data/spec/glue/run_star_expression_spec.rb +13 -11
- data/spec/support/factory_atomic.rb +22 -0
- data/spec/support/factory_methods.rb +11 -26
- metadata +28 -23
- data/lib/mini_kraken/core/cons_cell.rb +0 -82
- data/lib/mini_kraken/core/k_boolean.rb +0 -35
@@ -1,82 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative 'composite_term'
|
4
|
-
|
5
|
-
unless MiniKraken::Core.constants(false).include? :ConsCell
|
6
|
-
module MiniKraken
|
7
|
-
module Core
|
8
|
-
class ConsCell < CompositeTerm
|
9
|
-
attr_reader :car
|
10
|
-
attr_reader :cdr
|
11
|
-
|
12
|
-
def initialize(obj1, obj2 = nil)
|
13
|
-
super()
|
14
|
-
@car = obj1
|
15
|
-
if obj2.kind_of?(ConsCell) && obj2.null?
|
16
|
-
@cdr = nil
|
17
|
-
else
|
18
|
-
@cdr = obj2
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
def children
|
23
|
-
[car, cdr]
|
24
|
-
end
|
25
|
-
|
26
|
-
# Return true if it is an empty list, otherwise false.
|
27
|
-
# A list is empty, when both car and cdr fields are nil.
|
28
|
-
def null?
|
29
|
-
car.nil? && cdr.nil?
|
30
|
-
end
|
31
|
-
|
32
|
-
def ==(other)
|
33
|
-
return false unless other.respond_to?(:car)
|
34
|
-
|
35
|
-
(car == other.car) && (cdr == other.cdr)
|
36
|
-
end
|
37
|
-
|
38
|
-
def eql?(other)
|
39
|
-
(self.class == other.class) && car.eql?(other.car) && cdr.eql?(other.cdr)
|
40
|
-
end
|
41
|
-
|
42
|
-
def quote(anEnv)
|
43
|
-
return self if null?
|
44
|
-
|
45
|
-
new_car = car.nil? ? nil : car.quote(anEnv)
|
46
|
-
new_cdr = cdr.nil? ? nil : cdr.quote(anEnv)
|
47
|
-
ConsCell.new(new_car, new_cdr)
|
48
|
-
end
|
49
|
-
|
50
|
-
# Use the list notation from Lisp as a text representation.
|
51
|
-
def to_s
|
52
|
-
return '()' if null?
|
53
|
-
|
54
|
-
"(#{pair_to_s})"
|
55
|
-
end
|
56
|
-
|
57
|
-
def append(another)
|
58
|
-
@cdr = another
|
59
|
-
end
|
60
|
-
|
61
|
-
protected
|
62
|
-
|
63
|
-
def pair_to_s
|
64
|
-
result = +car.to_s
|
65
|
-
if cdr
|
66
|
-
result << ' '
|
67
|
-
if cdr.kind_of?(ConsCell)
|
68
|
-
result << cdr.pair_to_s
|
69
|
-
else
|
70
|
-
result << ". #{cdr}"
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
result
|
75
|
-
end
|
76
|
-
end # class
|
77
|
-
|
78
|
-
# Constant representing the null (empty) list.
|
79
|
-
NullList = ConsCell.new(nil, nil).freeze
|
80
|
-
end # module
|
81
|
-
end # module
|
82
|
-
end # defined
|
@@ -1,35 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative 'atomic_term'
|
4
|
-
|
5
|
-
module MiniKraken
|
6
|
-
module Core
|
7
|
-
# A specialized atomic term that represents an boolean (true/false) value.
|
8
|
-
# in MiniKraken
|
9
|
-
class KBoolean < AtomicTerm
|
10
|
-
# @param aValue [Boolean, Symbol] Ruby representation of boolean value
|
11
|
-
def initialize(aValue)
|
12
|
-
super(validated_value(aValue))
|
13
|
-
end
|
14
|
-
|
15
|
-
def to_s
|
16
|
-
value.to_s
|
17
|
-
end
|
18
|
-
|
19
|
-
private
|
20
|
-
|
21
|
-
def validated_value(aValue)
|
22
|
-
case aValue
|
23
|
-
when true, false
|
24
|
-
aValue
|
25
|
-
when :"#t", '#t'
|
26
|
-
true
|
27
|
-
when :"#f", '#f'
|
28
|
-
false
|
29
|
-
else
|
30
|
-
raise StandardError, "Invalid boolean literal '#{aValue}'"
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end # class
|
34
|
-
end # module
|
35
|
-
end # module
|