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