G
Guest
Уже несколько дней пытаюсь довести до ума вот эту задачку в Visual Prolog v.5.2.
Напишите программу с хвостовой рекурсией, которая допускает ввод числа и способна завершаться двумя способами. Она должна начинаться умножением числа на себя до тех пор, пока не достигнет числа 81 или числа, большего чем 100. Если достигнуто число 81, то печатается "Da", если же число больше 100 - печатается "Net".
Вот что получилось:
Например для числа 8: 8*8=64. Так как 81 не достигнуто, то должно сработать ещё одно вычисление, те 64*8=512. Но происходит умножение 64*64. Подскажите пожалуйста, как сделать чтобы работала правильно.
Напишите программу с хвостовой рекурсией, которая допускает ввод числа и способна завершаться двумя способами. Она должна начинаться умножением числа на себя до тех пор, пока не достигнет числа 81 или числа, большего чем 100. Если достигнуто число 81, то печатается "Da", если же число больше 100 - печатается "Net".
Вот что получилось:
Код:
predicates
vich(integer)
proverka_newB(integer)
clauses
vich(B):-
DopB=B,
NewB=DopB*B,
write(B),nl,
write(NewB),nl,
proverka_newB(NewB),
vich(NewB).
proverka_newB(NewB):-NewB<80.
proverka_newB(NewB):-NewB>80,NewB<99, write ("Da "),nl,fail.
proverka_newB(NewB):-NewB>99, write ("Net "),nl,fail.
goal
vich(8).
Например для числа 8: 8*8=64. Так как 81 не достигнуто, то должно сработать ещё одно вычисление, те 64*8=512. Но происходит умножение 64*64. Подскажите пожалуйста, как сделать чтобы работала правильно.