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 * 是 log 必须应用于 value 直到它小于或等于 1 的次数。

For Example:
log(log(log(log(3000)))) = 0.86364760439
so the log * (3000) = 4

根据我对序言中递归工作方式的理解,当我到达 N<1 的基本情况时,应该返回 A,并且在堆栈的下一级,Arev 应该被推断为 A +1 或 Aprev 是 1 等等直到它到达返回 A 的堆栈顶部。

Query:
lgstar(3000,A)
--> Should be 4

当我遇到 N<1 的情况时,我尝试将 0 返回到堆栈上的前一层,而不是得到一个参数没有充分实例化的错误。

4

0 回答 0