class RubyProlog::Environment
Public Class Methods
Public Instance Methods
Source
# File lib/ruby-prolog/ruby-prolog.rb, line 234 def [](t) t, env = dereference(t) return case t when Goal then Goal.new(t.pred_id, t.pred_name, env[t.args]) when Cons then Cons.new(env[t[0]], env[t[1]]) when Array then t.collect {|e| env[e]} else t end end
Source
# File lib/ruby-prolog/ruby-prolog.rb, line 198 def delete(x) @table.delete(x) {|k| raise "#{k} not found in #{inspect}"} end
Source
# File lib/ruby-prolog/ruby-prolog.rb, line 224 def dereference(t) env = self while Symbol === t p = env.get(t) break if p.nil? t, env = p end return [t, env] end
Source
# File lib/ruby-prolog/ruby-prolog.rb, line 190 def put(x, pair) @table[x] = pair end
Source
# File lib/ruby-prolog/ruby-prolog.rb, line 206 def solution @table.map do |var, env| xp = env loop { x, x_env = xp y, y_env = x_env.dereference(x) next_xp = y_env.get(x) if next_xp.nil? xp = [y, y_env] break else xp = next_xp end } [var, xp[0]] end.to_h end