0
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 を返そうとする代わりに、引数が十分にインスタンス化されていないというエラーが発生します。

4

0 に答える 0