Class: Logica::PredicateFactory
- Inherits:
-
Object
- Object
- Logica::PredicateFactory
- Defined in:
- lib/logica/predicate_factory.rb
Instance Method Summary collapse
- #ad_hoc(name = 'anonymous', &definition) ⇒ Object (also: #from_block)
- #at_least(minimum, predicates) ⇒ Object
- #at_most(maximum, predicates) ⇒ Object
- #between(minimum, maximum, predicates) ⇒ Object
- #conjunction(predicates) ⇒ Object
- #conjunction_from_pair(first_predicate, second_predicate) ⇒ Object
- #contradiction ⇒ Object
- #disjunction(predicates) ⇒ Object
- #disjunction_from_pair(first_predicate, second_predicate) ⇒ Object
- #exactly(amount, predicates) ⇒ Object
- #negation(predicate) ⇒ Object
- #partial_application(predicate, *first_arguments) ⇒ Object
- #tautology ⇒ Object
Instance Method Details
#ad_hoc(name = 'anonymous', &definition) ⇒ Object Also known as: from_block
60 61 62 |
# File 'lib/logica/predicate_factory.rb', line 60 def ad_hoc(name = 'anonymous', &definition) ad_hoc_class.new(name, &definition) end |
#at_least(minimum, predicates) ⇒ Object
23 24 25 26 27 28 29 30 31 32 33 34 35 |
# File 'lib/logica/predicate_factory.rb', line 23 def at_least(minimum, predicates) if minimum <= 0 tautology elsif minimum == 1 disjunction(predicates) elsif minimum == predicates.size conjunction(predicates) elsif minimum >= predicates.size contradiction else at_least_class.new(minimum, predicates) end end |
#at_most(maximum, predicates) ⇒ Object
37 38 39 40 41 42 |
# File 'lib/logica/predicate_factory.rb', line 37 def at_most(maximum, predicates) minimum = predicates.size - maximum negations = predicates.map(&:negated) at_least(minimum, negations) end |
#between(minimum, maximum, predicates) ⇒ Object
44 45 46 |
# File 'lib/logica/predicate_factory.rb', line 44 def between(minimum, maximum, predicates) at_least(minimum, predicates).and(at_most(maximum, predicates)) end |
#conjunction(predicates) ⇒ Object
3 4 5 |
# File 'lib/logica/predicate_factory.rb', line 3 def conjunction(predicates) compound_from_list(predicates, conjunction_class) end |
#conjunction_from_pair(first_predicate, second_predicate) ⇒ Object
7 8 9 |
# File 'lib/logica/predicate_factory.rb', line 7 def conjunction_from_pair(first_predicate, second_predicate) compound_from_pair(first_predicate, second_predicate, conjunction_class) end |
#contradiction ⇒ Object
56 57 58 |
# File 'lib/logica/predicate_factory.rb', line 56 def contradiction contradiction_class.new end |
#disjunction(predicates) ⇒ Object
11 12 13 |
# File 'lib/logica/predicate_factory.rb', line 11 def disjunction(predicates) compound_from_list(predicates, disjunction_class) end |
#disjunction_from_pair(first_predicate, second_predicate) ⇒ Object
15 16 17 |
# File 'lib/logica/predicate_factory.rb', line 15 def disjunction_from_pair(first_predicate, second_predicate) compound_from_pair(first_predicate, second_predicate, disjunction_class) end |
#exactly(amount, predicates) ⇒ Object
48 49 50 |
# File 'lib/logica/predicate_factory.rb', line 48 def exactly(amount, predicates) between(amount, amount, predicates) end |
#negation(predicate) ⇒ Object
19 20 21 |
# File 'lib/logica/predicate_factory.rb', line 19 def negation(predicate) negation_class.new(predicate) end |
#partial_application(predicate, *first_arguments) ⇒ Object
65 66 67 |
# File 'lib/logica/predicate_factory.rb', line 65 def partial_application(predicate, *first_arguments) partial_application_class.new(predicate, *first_arguments) end |
#tautology ⇒ Object
52 53 54 |
# File 'lib/logica/predicate_factory.rb', line 52 def tautology tautology_class.new end |