class RubyProlog::Predicate

Attributes

clauses[RW]
db[RW]
id[R]
name[R]

Public Class Methods

new(db, name, explicit_id: nil) click to toggle source
# File lib/ruby-prolog/ruby-prolog.rb, line 17
def initialize(db, name, explicit_id: nil)
  @id = explicit_id || (@@id_counter += 1)
  @db = db
  @name = name
  @clauses = []
end

Public Instance Methods

<<(goals) click to toggle source

DSL for 0-arity predicates

# File lib/ruby-prolog/ruby-prolog.rb, line 48
def <<(goals); TempClause.new(@db, self, []) << goals; end
[](*args) click to toggle source
# File lib/ruby-prolog/ruby-prolog.rb, line 28
def [](*args)
  TempClause.new(@db, self, args)
end
fact() click to toggle source
# File lib/ruby-prolog/ruby-prolog.rb, line 50
def fact; TempClause.new(@db, self, []).fact; end
fork(new_db) click to toggle source
# File lib/ruby-prolog/ruby-prolog.rb, line 38
def fork(new_db)
  dupe = self.clone
  dupe.db = new_db
  dupe.clauses = dupe.clauses.dup
  dupe
end
inspect() click to toggle source
# File lib/ruby-prolog/ruby-prolog.rb, line 24
def inspect
  @name.to_s
end
to_goal() click to toggle source
# File lib/ruby-prolog/ruby-prolog.rb, line 49
def to_goal; TempClause.new(@db, self, []).to_goal; end
to_prolog() click to toggle source
# File lib/ruby-prolog/ruby-prolog.rb, line 32
def to_prolog
  @clauses.map do |head, body|
    "#{head.to_prolog}#{body ? " :- #{body.to_prolog}" : ''}."
  end.join("\n")
end