Повторный логарифм в прологе

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

0 ответов

Другие вопросы по тегам