【发布时间】:2013-05-27 23:18:07
【问题描述】:
我正在尝试在 prolog 中创建一个谓词,如果它达到一组值中的最低数值,则该谓词将成立。
例如:
我现在有这样的事情
基本步骤
lowest(Object, Value) :- \+ lessThan(Object, Value, NewValue).
递归步骤
lowest(Object, Value) :- lessThan(Object, Value, NewValue), lowest(Object, NewValue).
Object 是一些抽象对象,可以附加多个数值。
lessThan 返回小于输入值的对象的值 (NewValue)。
并且由于 NewValue 将低于 Value 的输入,我可以假设随着每个递归步骤 Value 都会减少。
我已经从另一个我试图解决的问题中抽象出这个问题,但基本上正在发生的事情是我期望整个递归函数只有 2 个输出,但我得到的输出与 lessThan(Object, Initial, X) + 2 一样多。
我不确定这个问题是否清楚,请告诉我,以便我澄清。
我相信我的基本步骤是正确的,因为我假设如果 Value 是与 Object 耦合的最低值,那么没有其他值小于 Value。
我也不确定在哪里终止递归,这增加了我的困惑。我的猜测是,一旦达到 Object 没有较低值的状态,它将终止。
【问题讨论】:
-
一个调用
allLessThan(Object, Value, NewValue)如果成功,把一个值放到NewValue中,比Value的小?如果是,为什么叫all...? -
好点,我想我已经想到了,因为我可以使用;以交互方式返回(或打印出)“所有”低于 Value 的值(并且对于每次迭代,NewValue 保持新的较低值)。然而,这只是我想出的抽象真正问题的东西,我现在会改变它。
标签: recursion prolog terminate