lib/porolog/predicate/builtin.rb in porolog-1.0.2 vs lib/porolog/predicate/builtin.rb in porolog-1.0.3

- old
+ new

@@ -278,11 +278,11 @@ return false unless variable.type == :variable all_values = all_values.map(&:value).map(&:value) exclusions = exclusions.map(&:value).map(&:value) - possible_values = goal[anonymous] + possible_values = goal[Porolog::anonymous] if exclusions.uniq.size == exclusions.size !!possible_values.instantiate(all_values - exclusions) && Predicate.call_builtin(:member, goal, block, variable, possible_values) || false else false @@ -433,11 +433,11 @@ case [list.type, length.type] when [:array, :atomic] list.length == length when [:variable, :atomic] - list.instantiate(Array.new(length){goal[_]}) + list.instantiate(Array.new(length){goal[Porolog::anonymous]}) when [:array, :variable] length.instantiate(list.length) else false end && block.call(goal) || false @@ -531,13 +531,13 @@ case [element_value.type, list.type] when [:atomic, :array], [:array, :array] satisfied = false list.each do |i| - unifications = unify(element_value, i, goal) + unifications = Porolog::unify(element_value, i, goal) if unifications - instantiations = instantiate_unifications(unifications) + instantiations = Porolog::instantiate_unifications(unifications) if instantiations block.call(goal) && (satisfied = true) instantiations.each(&:remove) end end @@ -558,11 +558,11 @@ satisfied when [:variable, :variable], [:atomic, :variable], [:array, :variable] satisfied = false limit.times do |i| - instantiation = list.instantiate([*Array.new(i){goal[_]}, element, UNKNOWN_TAIL]) + instantiation = list.instantiate([*Array.new(i){goal[Porolog::anonymous]}, element, Porolog::UNKNOWN_TAIL]) instantiation && block.call(goal) && (satisfied = true) instantiation&.remove return satisfied if goal.terminated? end satisfied @@ -598,34 +598,34 @@ case [front.type, back.type, front_back.type] when [:array, :array, :array] satisfied = false if front.length + back.length == front_back.length - unifications = unify(front + back, front_back, goal) - instantiations = instantiate_unifications(unifications) if unifications + unifications = Porolog::unify(front + back, front_back, goal) + instantiations = Porolog::instantiate_unifications(unifications) if unifications instantiations && block.call(goal) && (satisfied = true) instantiations&.each(&:remove) end satisfied when [:array, :array, :variable] satisfied = false - unifications = unify(front + back, front_back, goal) - instantiations = instantiate_unifications(unifications) if unifications + unifications = Porolog::unify(front + back, front_back, goal) + instantiations = Porolog::instantiate_unifications(unifications) if unifications instantiations && block.call(goal) && (satisfied = true) instantiations&.each(&:remove) satisfied when [:array, :variable, :array] satisfied = false if front.length <= front_back.length expected_front = front_back[0...front.length] expected_back = front_back[front.length..-1] - unifications = unify(front, expected_front, goal) - unifications += unify(back, expected_back, goal) if unifications - instantiations = instantiate_unifications(unifications) if unifications + unifications = Porolog::unify(front, expected_front, goal) + unifications += Porolog::unify(back, expected_back, goal) if unifications + instantiations = Porolog::instantiate_unifications(unifications) if unifications instantiations && block.call(goal) && (satisfied = true) instantiations&.each(&:remove) end satisfied @@ -633,13 +633,13 @@ satisfied = false if back.length <= front_back.length expected_front = front_back[0...-back.length] expected_back = front_back[-back.length..-1] - unifications = unify(front, expected_front, goal) - unifications += unify(back, expected_back, goal) if unifications - instantiations = instantiate_unifications(unifications) if unifications + unifications = Porolog::unify(front, expected_front, goal) + unifications += Porolog::unify(back, expected_back, goal) if unifications + instantiations = Porolog::instantiate_unifications(unifications) if unifications instantiations && block.call(goal) && (satisfied = true) instantiations&.each(&:remove) end satisfied @@ -647,23 +647,23 @@ satisfied = false (front_back.length + 1).times do |i| expected_front = front_back[0...i] expected_back = front_back[i..-1] - unifications = unify(front, expected_front, goal) - unifications += unify(back, expected_back, goal) if unifications - instantiations = instantiate_unifications(unifications) if unifications + unifications = Porolog::unify(front, expected_front, goal) + unifications += Porolog::unify(back, expected_back, goal) if unifications + instantiations = Porolog::instantiate_unifications(unifications) if unifications instantiations && block.call(goal) && (satisfied = true) instantiations&.each(&:remove) return satisfied if goal.terminated? end satisfied when [:array, :variable, :variable] satisfied = false - unifications = unify(front / back, front_back, goal) - instantiations = instantiate_unifications(unifications) if unifications + unifications = Porolog::unify(front / back, front_back, goal) + instantiations = Porolog::instantiate_unifications(unifications) if unifications instantiations && block.call(goal) && (satisfied = true) instantiations&.each(&:remove) satisfied when [:variable, :array, :variable] @@ -718,54 +718,54 @@ case [list1.variables.empty?, list2.variables.empty?] when [true, true] list1 = list1.sort_by(&:inspect) list2 = list2.sort_by(&:inspect) - unifications = unify(list1, list2, goal) - instantiations = instantiate_unifications(unifications) if unifications + unifications = Porolog::unify(list1, list2, goal) + instantiations = Porolog::instantiate_unifications(unifications) if unifications instantiations && block.call(goal) && (satisfied = true) instantiations&.each(&:remove) when [false, true], [false, false] list2.permutation do |p| - unifications = unify(list1, p, goal) + unifications = Porolog::unify(list1, p, goal) instantiations = nil - instantiations = instantiate_unifications(unifications) if unifications + instantiations = Porolog::instantiate_unifications(unifications) if unifications instantiations && block.call(goal) && (satisfied = true) instantiations&.each(&:remove) return satisfied if goal.terminated? end when [true, false] list1.permutation do |p| - unifications = unify(list2, p, goal) + unifications = Porolog::unify(list2, p, goal) instantiations = nil - instantiations = instantiate_unifications(unifications) if unifications + instantiations = Porolog::instantiate_unifications(unifications) if unifications instantiations && block.call(goal) && (satisfied = true) instantiations&.each(&:remove) return satisfied if goal.terminated? end end satisfied when [:array, :variable] satisfied = false list1.permutation do |p| - unifications = unify(p, list2, goal) - instantiations = instantiate_unifications(unifications) if unifications + unifications = Porolog::unify(p, list2, goal) + instantiations = Porolog::instantiate_unifications(unifications) if unifications instantiations && block.call(goal) && (satisfied = true) instantiations&.each(&:remove) return satisfied if goal.terminated? end satisfied when [:variable, :array] satisfied = false list2.permutation do |p| - unifications = unify(list1, p, goal) + unifications = Porolog::unify(list1, p, goal) instantiations = nil - instantiations = instantiate_unifications(unifications) if unifications + instantiations = Porolog::instantiate_unifications(unifications) if unifications instantiations && block.call(goal) && (satisfied = true) instantiations&.each(&:remove) return satisfied if goal.terminated? end satisfied @@ -797,19 +797,19 @@ list2 = list2.value.value case [list1.type, list2.type] when [:array, :array], [:variable, :array] satisfied = false - unifications = unify(list1, list2.reverse, goal) - instantiations = instantiate_unifications(unifications) if unifications + unifications = Porolog::unify(list1, list2.reverse, goal) + instantiations = Porolog::instantiate_unifications(unifications) if unifications instantiations && block.call(goal) && (satisfied = true) instantiations&.each(&:remove) satisfied when [:array, :variable] satisfied = false - unifications = unify(list1.reverse, list2, goal) - instantiations = instantiate_unifications(unifications) if unifications + unifications = Porolog::unify(list1.reverse, list2, goal) + instantiations = Porolog::instantiate_unifications(unifications) if unifications instantiations && block.call(goal) && (satisfied = true) instantiations&.each(&:remove) satisfied else