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