【发布时间】:2013-10-30 07:12:00
【问题描述】:
我编写了以下代码,应该符合我的逻辑,但它没有。
我应该检查给定的术语是否是二的幂。例如s(s(s(nul))) 应该返回 false,s(s(s(s(nul))) 应该返回 true。
substractWhileY(X,0,rezult).
substractWhileY(s(X),Y,rezult):-
Y > 0, number is 1, substractWhileY(X,Y - number, rezult).
degreeOftwo(X):-
substractWhileY(X,2,rezult),
pagalba(X, 2, rezult).
calculateAnswer(X, currentCounter, currentValue):-
currentCounter is currentCounter * 2,
substractWhileY(currentValue, currentCounter , rezult),
rezult\= null,
calculateAnswer(X, currentCounter , rezult).
我的想法是检查给定的 therm 是否是任意二的度数,如果不是,则不是二度数。
对于数字,它应该像这样工作。例如我给数字 8。
First time it checks if 8 - 2 = 0.
second time if 8 - 4 = 0.
third time if 8 - 8 = 0.
所以是两个的 8 id 幂。
也许其他解决方案会更好,所以感谢您的帮助。
【问题讨论】:
-
变量以大写开头!
-
2 度是什么意思? 0, 2, 4, 8, 16, ...?
-
是的,您记下的正是这些数字。我不知道怎么用英文正确称呼它
-
那么它的公式是什么? 2^n 有点道理,但 2^0 是 1,而不是 0....
-
@Riku,那将是“2 的幂”。而“热”可能是指“术语”。 :)
标签: prolog successor-arithmetics