具有特定条件的Prolog方法

时间:2018-11-19 00:44:59

标签: recursion prolog

我正在尝试编写一个函数,该函数在每次recursion调用中获取新值,如果失败,则increase个数字并再次尝试直到数字达到{{1} }或6

这里重要的一点是,只有成功一次并增加或减少数字时,才应该进入第二部分。并且如果成功一次并增加/降低了它,则应检查函数1是否适用于新的数字,如果它没有再次增加或降低该数字,直到数字达到try_to_do_math6,除非在数字达到16之前成功。

它还应该通过检查1的值来检查是add还是substract

higer_or_lower

我正在使用变量?- iterate_over(1, 1, Z, X). iterate_over(X,Y,Z,higher_or_lower):- try_to_do_math(X,Y,X1,Y1,high_low), iterate_over(X1, Y1,1,high_low). iterate_over(X,Y,Z,higher_or_lower):- higher_or_lower = 1, %Go higher Z = 1, X1 is X+1, X=<6, Y1 is Y+1, Y=<6, iterate_over(X1, Y1, 0,higher_or_lower). iterate_over(X,Y,Z,higher_or_lower):- higher_or_lower = 2, %Go lower Z = 1, X1 is X-1, 1=< X, Y1 is Y-1, 1=< Y, iterate_over(X1, Y1, 0,higher_or_lower). 来检查它是否成功。如果为Z,则表示已成功;如果为1,则为空。

使用此代码,它总是在_上失败,因为到达那里进行检查时它没有值Z=1

如果1第一次尝试失败,则什么也不会发生,并且返回try_to_do_math

如果false第一次成功,则它会返回新的try_to_do_math。然后,我尝试将变量X1 and Y1 and higer/lower作为状态变量传递给状态变量,只是在这里Z再次调用它时将其更改为1。

编辑

我将尝试做一个成功的例子。 可以说正确的是X = 5和Y = 5。

首先调用iterate_over(X1, Y1,1,high_low).
然后,它转到?- iterate_over(1, 1, Z, X).并返回try_to_do_math(1, 1, X, Y, Z)
然后,它应该通过调用try_to_do_math(1, 1, 3, 3, 0)再次尝试。现在,它尝试调用?- iterate_over(3, 3, 1, 0).,但失败了。

现在,它应该转到值为try_to_do_math(3,3,X1,Y1,higher_or_lower),的较低的iterate_over方法,但是在这里它并不能如我所愿。用数字iterate_over(3, 3, 1, 0)调用该方法,由于iterate_over(3, 3, _, 0)都失败了。

我不确定这是否有帮助,但是我试图用自己的方式解释它。

如果成功了,那么我也不在乎响应,因为1 != _只会改变事情。

0 个答案:

没有答案