我需要检查第一个给定的术语(例如s(s(nul))
(或2))是否可以被第二个术语分割(例如s(nul)
(或1))。
我想要做的是将给定的项乘以2,然后检查该项是否小于或等于另一项(如果它相等 - 问题已解决)。
到目前为止,我得到了这个:
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.任何想法?
答案 0 :(得分:1)
如果a = n*b, n > 0
,它也是a = n*b = (1+m)*b = b + m*b, m >= 0
。
因此,如果a
可以b
和a = b+x
分割,那么x
也可以被b
分割。
在Peano编码中,n = 1+m
写为n = s(m)
。
从这里开始。