Составители:
Рубрика:
17
write_string :- write(“*****”),nl, write_string.
будет бесконечно печатать звездочки на экране компьютера.
Следующая программа печатает на экране компьютера цифры от 1
до 7.
Программа 10
DOMAINS
number=integer
PREDICATES
write_number(number)
GOAL
write(“Это числа:”), nl, write_number(1).
CLAUSES
write_number(10).
write_number(N) :- N<10,write(N),nl,N1:=N+1, write_number(N).
В разделе clauses даны два описания предиката write_number. Если в
процессе решения первое описание неуспешно, то используется второе
описание.
Программа 11 печатает сумму всех цифр введенного с клавиатуры
числа.
Программа 11
PREDICATES
summa(integer,integer)
CLAUSES
summa(X,Y):-X<10,Y=X,!.
summa(X,Y):-X1=X div 10,summa(X1,Y1),Z=X mod 10,Y=Y1+Z.
Использование предиката ! в описании нерекурсивного правила по-
зволяет избежать здесь переполнения стека.
Существуют проблемы, в которых использование рекурсии особен-
но выгодно.
Рассмотрим задачу «Ханойская башня» которую, как говорят, при-
думал в 1883 г. французский математик Люка.
Имеются три стержня, на одном из которых помещены N колец раз-
ного диаметра, при этом, чем меньше диаметр кольца, тем выше оно
лежит (рис. 1). Например, для четырех колец получается картинка:
Требуется переместить диски с первого на третий стержень за неко-
торую последовательность ходов, каждый из которых заключается в пе-
Страницы
- « первая
- ‹ предыдущая
- …
- 17
- 18
- 19
- 20
- 21
- …
- следующая ›
- последняя »