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.
- 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
|