Sha256: 1573cb1d05004878615d068ca21409a54d051b4ae897074f6a84df4ea3ee4323
Contents?: true
Size: 1.73 KB
Versions: 4
Compression:
Stored size: 1.73 KB
Contents
class Syllogism class Statement attr_reader :atoms, :errors def self.[](string) parse(string) end def self.atomize(word) ATOMIC_TYPES.map do |type| type.new(word) end.detect { |atom| atom.match? } end def self.parse(string) new(string.split(" ").map { |word| atomize(word) }) end def initialize(atoms) @atoms = atoms @errors = [] end def distribute TermDistributor.new(self).call end def formula formula_checker.formula end def general_terms terms.select { |term| term.instance_of?(GeneralTerm) } end def predicate terms.last end def subject terms.first end def terms @terms ||= atoms.select { |atom| TERM_TYPES.include?(atom.class) } end def to_s atoms.map(&:value).join(" ") end def wff? known_atoms? && verb? && known_formula? end private ATOMIC_TYPES = [ All, No, Some, GeneralTerm, Verb, Negation, SingularTerm, Unknown ].freeze TERM_TYPES = [GeneralTerm, SingularTerm].freeze def formula_checker @formula_checker ||= WffChecker.new(self) end def known_atoms? unknown.none? end def known_formula? formula_checker.any? end def unknown @unknown ||= atoms.select do |atom| atom.instance_of?(Unknown) end.tap do |atoms| atoms.each { |atom| errors.push("'#{atom.value}' is an unknown atom") } end end def verb? if atoms.any? { |atom| atom.instance_of?(Verb) } true else errors.push("'#{self}' does not contain the verb 'is' or 'are'") false end end end end
Version data entries
4 entries across 4 versions & 1 rubygems
Version | Path |
---|---|
syllogism-0.3.0 | lib/syllogism/statement.rb |
syllogism-0.2.2 | lib/syllogism/statement.rb |
syllogism-0.2.1 | lib/syllogism/statement.rb |
syllogism-0.2.0 | lib/syllogism/statement.rb |