Повторный логарифм в прологе
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 на предыдущий уровень в стеке, вместо этого я получаю аргументы, не являющиеся достаточно инстанцированной ошибкой.