Sha256: 3b6a3aacfb8b88bb2a2d49470a9dbe43e89085430da0cb36cc8f7b956380574d

Contents?: true

Size: 1.09 KB

Versions: 1

Compression:

Stored size: 1.09 KB

Contents

module Ravensat
  class Node
    include Enumerable

    attr_reader :children
    def initialize
      @children = []
    end

    def each
      yield(self)
      @children.each do |child|
        child.each {|c| yield(c)}
      end
    end

    def each_with_clause
      case self
      when AndNode, OrNode
        @children.first.each_with_clause{|c| yield(c)}
        yield(self)
        @children.last.each_with_clause{|c| yield(c)}
      when NotNode
        yield(self)
        @children.first.each_with_clause{|c| yield(c)}
      when VarNode
        yield(self)
      end
    end

    def &(object)
      AndNode.new(self, object)
    end

    def |(object)
      OrNode.new(self, object)
    end

    # def tree_text
    #   self.each do |child|
    #     child.to_s
    #   end
    # end

    def to_s
      self.class.name
    end

    def cnf?
      @children.map(&:cnf?).reduce(:&)
    end

    def vars
      self.select{|node| node.is_a? VarNode}.uniq
    end

    def vars_size
      self.vars.size
    end

    def clauses_size
      self.count{|node| node.is_a? AndNode} + 1
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
ravensat-0.3.0 lib/ravensat/ast/node.rb