Советы, трюки и секреты для Blogger.com блоггеров. Все для Blogspot. Советы, трюки и секреты для Blogger.com блоггеров. Все для Blogspot.

Рекурсивно-логическое программирование (prolog)

10 декабря 2009, 23:21

Рекурсия в прологе, решение очередной лабораторной работы по RLP. Остальные решенные лабы на прологе тут.

Задание 1.Используя рекурсию, напишите программу, вычисляющую сумму первых N натуральных чисел. Например: Цель sum(9,S) должна возвращать S=45, а sum(100,S) — 5050. Примечание: 55=1+2+3+4+5+6+7+8+9+10.

Задание 2.Измените программу, полученную в задании 1 так, чтобы она вычисляла сумму нечетных натуральных чисел от 1 до указанного нечетного числа. Например: Цель sum2(9,S) должна возвращать S=25. Примечание: 25=1+3+5+7+9.

Задание 3.Измените программу, полученную в задании 2 так, чтобы она вычисляла либо сумму нечетных натуральных чисел от 1 до указанного нечетного числа, либо сумму четных натуральных чисел от 2 до указанного четного числа. Например: Цель sum3(9,S) должна возвращать S=25, а sum3(10,S) — 30. Примечание: 25=1+3+5+7+9, 30=2+4+6+8+10.

Задание 4. Напишите программу, вычисляющую факториал числа N. Например: Цель fact(5,F) должна возвращать F=120, а fact(10,F) — 3628800.

Решение:

domains
 ss = real
 aa = real
predicates
sum(aa,ss)
sum2(aa,ss)
sum3(aa,ss)
fact(aa,ss)
clauses
sum(0,0).
sum(1,1):-!.
sum(A,S):- A1= A-1 , sum(A1,S1), S=S1+A.
sum2(1,1):-!.
sum2(A,S):- A1= A-2, sum2(A1,S1), S=S1+A. 
sum3(1,1):-!.
sum3(0,0):-!.
sum3(A,S):- A1= A-1 , sum(A1,S1), S=S1+A.
fact(1,1):-!.
fact(A,S):- A1= A-1, fact(A1,S1), S= S1*A.

Рекурсивно-логическое программирование (prolog)