• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Хвостовая Рекурсия

  • Автор темы Guest
  • Дата начала
Статус
Закрыто для дальнейших ответов.
G

Guest

Уже несколько дней пытаюсь довести до ума вот эту задачку в Visual Prolog v.5.2.
Напишите программу с хвостовой рекурсией, которая допускает ввод числа и способна завершаться двумя способами. Она должна начинаться умножением числа на себя до тех пор, пока не достигнет числа 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. Подскажите пожалуйста, как сделать чтобы работала правильно.
 
R

rrrFer

<!--shcode--><pre><code class='prolog'>p(T,N):-
T > 100, write(no),!;
T > 81, write(yes),!;
T*N=TT, p(TT,N).[/CODE]
не проверял
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!