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