TURBO PROLOG. Терёхин В.В. - 93 стр.

UptoLike

Составители: 

93
4.13. Модифицируйте программу Сумма ряда 1 так, чтобы ее резуль-
татом была сумма следующего ряда нечетных чисел:
S(15) = 1 + 3 + 5 + . . . + 15
4.14. Постройте таблицу обрабатываемых значений для программы
Сумма ряда 1, показывающую работу правила рекурсии.
Листинг 4.10
_______________________________________________________
/* Программа: Сумма ряда 2 */
/* Назначение: Демонстрация использования рекурсивного */
/* предиката для нахождения суммы ряда S, */
/* где S(N), где N положительное целое число */
/* Пример: S(7) = 7+6+5+4+3+2+1 = 28 */
domains
number, sum = integer
predicates
sum_series(number, sum)
goal
sum_series(7,Sum),
write("Сумма ряда:"),nl,nl,
write(" S(7) = ", Sum), nl.
clauses
sum_series(1,1) :- !. /* сумма ряда */
sum_series(Number,Sum) :-
Next_number = Number - 1, s
um_series(Next_number,
Partial_Sum),
Sum = Number + Partial_sum.
______________________________________________________
Программа Сумма ряда 2 (листинг 4.10) является модификацией про-
граммы Сумма ряда 1. Модификация выполнена посредством
удаления условия выхода Number > 0 и введения правила sum_series(1,1) :- !.
вместо sum_series(1,1).
Сравним вид правила рекурсии в предыдущей программе с модифици-
рованным правилом рекурсии в
программе Сумма ряда 2:
Правило рекурсии Сумма ряда 1
sum_series(1,1). /* сумма ряда */
sum_series(Number,Sum) :-
Number > 0,
Next_number = Number - 1,
sum_series(Next_number, Partial_Sum),
     4.13. Модифицируйте программу Сумма ряда 1 так, чтобы ее резуль-
татом была сумма следующего ряда нечетных чисел:
     S(15) = 1 + 3 + 5 + . . . + 15
     4.14. Постройте таблицу обрабатываемых значений для программы
Сумма ряда 1, показывающую работу правила рекурсии.

                Листинг 4.10
_______________________________________________________
/* Программа: Сумма ряда 2                                          */
/* Назначение: Демонстрация использования рекурсивного              */
/*              предиката для нахождения суммы ряда S,              */
/*              где S(N), где N положительное целое число           */
/* Пример:      S(7) = 7+6+5+4+3+2+1 = 28                           */

domains
    number, sum = integer

predicates
      sum_series(number, sum)

goal
      sum_series(7,Sum),
                 write("Сумма ряда:"),nl,nl,
                 write(" S(7) = ", Sum), nl.
clauses
      sum_series(1,1) :- !.        /* сумма ряда */
      sum_series(Number,Sum) :-
                        Next_number = Number - 1, s
                        um_series(Next_number,
                        Partial_Sum),
                        Sum = Number + Partial_sum.
______________________________________________________

     Программа Сумма ряда 2 (листинг 4.10) является модификацией про-
граммы Сумма ряда 1. Модификация выполнена посредством
удаления условия выхода Number > 0 и введения правила sum_series(1,1) :- !.
вместо sum_series(1,1).
     Сравним вид правила рекурсии в предыдущей программе с модифици-
рованным правилом рекурсии в программе Сумма ряда 2:
     Правило рекурсии Сумма ряда 1
     sum_series(1,1).        /* сумма ряда */
     sum_series(Number,Sum) :-
                          Number > 0,
                          Next_number = Number - 1,
                          sum_series(Next_number, Partial_Sum),


                                                                         93