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返回到堆栈上的前一层而不是我得到的参数没有充分实例化错误。