class RubyProlog::Database

Attributes

by_id[R]
by_name[R]

Public Class Methods

new() click to toggle source
# File lib/ruby-prolog/ruby-prolog.rb, line 269
def initialize
  @by_name = {
    'false' => Predicate.new(self, 'false', explicit_id: 0)
  }
  @by_id = {
    0 => @by_name['false']
  }
  @listing_enabled = false
  @listing = {}
end

Public Instance Methods

append(head, body) click to toggle source
# File lib/ruby-prolog/ruby-prolog.rb, line 291
def append(head, body)
  pred = @by_id[head.pred_id]
  if pred.nil?
    raise "No such predicate for head: #{head.inspect}"
  end
  pred.clauses << [head, body]
  if @listing_enabled && @listing[pred.id] != false
    # Ruby hashes maintain insertion order
    @listing[pred.id] = true
  end
end
enable_listing(flag=true) click to toggle source
# File lib/ruby-prolog/ruby-prolog.rb, line 287
def enable_listing(flag=true)
  @listing_enabled = true
end
initialize_copy(orig) click to toggle source
Calls superclass method
# File lib/ruby-prolog/ruby-prolog.rb, line 303
def initialize_copy(orig)
  super
  @by_id = @by_id.transform_values do |pred|
    pred.fork(self)
  end
  @by_name = @by_name.transform_values {|pred| @by_id[pred.id]}
end
listing() click to toggle source
# File lib/ruby-prolog/ruby-prolog.rb, line 311
def listing
  @listing.select{|_,v| v}.map{|k,v| @by_id[k]}
end
register(pred_name, skip_listing: false) click to toggle source
# File lib/ruby-prolog/ruby-prolog.rb, line 280
def register(pred_name, skip_listing: false)
  pred = @by_name[pred_name] = Predicate.new(self, pred_name)
  @by_id[pred.id] = pred
  @listing[pred.id] = false if skip_listing
  pred
end