log2(I,E):-
(
number(I)
-> E is log(I)/log(2);
number(E)
-> I is 2**E
).
lgstar(N,A):-
(N>1
->
(
log2(N,Nprev),
lgstar(Nprev,Aprev),
Aprev is A-1
);
A is 0
).
Log * は、値が 1 以下になるまでログを値に適用する必要がある回数です。
For Example:
log(log(log(log(3000)))) = 0.86364760439
so the log * (3000) = 4
N<1 の基本ケースに到達したときにプロローグで再帰が機能する方法についての私の理解から、A を返す必要があり、スタックの次のレベルでは、Aprev は A +1 または Aprev が 1 であると推測される必要があります。 A が返されるスタックの一番上に到達するまでオンになります。
Query:
lgstar(3000,A)
--> Should be 4
N<1 の場合に到達すると、スタックの前のレイヤーに 0 を返そうとする代わりに、引数が十分にインスタンス化されていないというエラーが発生します。