class RubyProlog::Database
Attributes
Public Class Methods
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
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
Source
# File lib/ruby-prolog/ruby-prolog.rb, line 287 def enable_listing(flag=true) @listing_enabled = true end
Source
# 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
Calls superclass method
Source
# File lib/ruby-prolog/ruby-prolog.rb, line 311 def listing @listing.select{|_,v| v}.map{|k,v| @by_id[k]} end
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