0

我需要检查第一个给定的术语(例如s(s(nul))(或 2))是否可以被第二个术语(例如s(nul)(或 1))整除。

我想要做的是将给定术语乘以二,然后检查该术语是否小于或等于另一个术语(如果相等 - 问题已解决)。

到目前为止,我得到了这个:

checkingIfDividable(X,X).
checkingIfDividable(X,Y) :-
    X > Y,
    multiplication(X,Y).

/* multiplication by two should occur here. 
   I can't figure it out. This solution does not work!*/
multiplication(Y):-
    YY is Y * 2,
    checkingIfDividable(X,YY).

我似乎无法弄清楚如何将一个术语乘以 2。有什么想法吗?

4

1 回答 1

1

如果a = n*b, n > 0,它也是a = n*b = (1+m)*b = b + m*b, m >= 0

所以 ifa可以被b, 和整除a = b+x, thenx也可以被 整除b.

在 Peano 编码中,n = 1+m写成n = s(m).

从这里拿走。

于 2015-10-28T09:52:07.073 回答