class RubyProlog::TempClause

Public Class Methods

new(db, pred, args) click to toggle source
# File lib/ruby-prolog/ruby-prolog.rb, line 54
def initialize(db, pred, args)
  @db, @pred, @args = db, pred, args
end

Public Instance Methods

<<(rhs) click to toggle source
# File lib/ruby-prolog/ruby-prolog.rb, line 73
def <<(rhs)
  case rhs
  when Array
    si(*rhs)
  else
    si(rhs)
  end
end
calls(&callback) click to toggle source
# File lib/ruby-prolog/ruby-prolog.rb, line 82
def calls(&callback)
  @db.append(self.to_goal, callback)
end
fact() click to toggle source
# File lib/ruby-prolog/ruby-prolog.rb, line 69
def fact
  si
end
si(*rhs) click to toggle source
# File lib/ruby-prolog/ruby-prolog.rb, line 58
def si(*rhs)
  goals = rhs.map do |x|
    case x
    when TempClause then x.to_goal
    when false then Goal.new(0, 'false', [])
    else x
    end
  end
  @db.append(self.to_goal, list(*goals))
end
to_goal() click to toggle source
# File lib/ruby-prolog/ruby-prolog.rb, line 86
def to_goal
  Goal.new(@pred.id, @pred.name, @args.map do |arg|
    case arg
    when TempClause
      arg.to_goal
    else
      arg
    end
  end)
end

Private Instance Methods

list(*x) click to toggle source
# File lib/ruby-prolog/ruby-prolog.rb, line 99
def list(*x)
  y = nil
  x.reverse_each {|e| y = Cons.new(e, y)}
  return y
end