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