私のロジックで動作するはずの次のコードを作成しましたが、動作しません。
与えられた項が 2 のべき乗であるかどうかを確認する必要があります。たとえば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).
私の考えは、与えられたものが2の次数であるかどうか、そうでない場合は2の次数ではないことを確認することでした。
数値では、このように機能するはずです。たとえば、私は8番を与えます。
First time it checks if 8 - 2 = 0.
second time if 8 - 4 = 0.
third time if 8 - 8 = 0.
つまり、id の 2 の 8 乗です。
他の解決策がうまくいくかもしれませんので、助けてくれてありがとう。