Prolog中的迭代对数

时间:2016-04-25 18:54:26

标签: prolog logarithm iterated-function

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

根据我对prolog中递归的方式的理解,当我到达N <1的基本情况时,应该返回A,并且在堆栈的下一级,Aprev应该被推断为A + 1或Aprev是1,依此类推,直到它到达堆栈的顶部,然后返回A.

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

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

0 个答案:

没有答案