Сложение полиномов на Prolog

      Комментарии к записи Сложение полиномов на Prolog отключены

В этой теме 0 ответов, 1 участник, последнее обновление  Васильев Владимир Сергеевич 2 мес., 4 нед. назад.

  • Автор
    Сообщения
  • #3244

    Пусть полином задается в виде списка. Список [a0, a1, a2, ... an] соответствует полиному a0 + a1*x + a2*(x^2) + ... + an*(x^n). Напишем на языке Prolog программу, складывающую два полинома. При этом, если будут даны полиномы разной степени (списки разной длины), надо полагать, что коэффициенты при меньших степенях в более коротком списке равны нулю.

    При разработке программы на Visual Prolog или Turbo Prolog нудно описать прототип функции, в нашем случае она имеет три аргумента — два входных списка и один результирующий:

    predicates
      polynome_sum(list_d, list_d, list_d)

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

    clauses
      polynome_sum([], Polynome, Polynome):-!.
      polynome_sum(Polynome, [], Polynome).
      polynome_sum([HeadA|TailA], [HeadB|TailB], [HeadSum|TailSum]):-
      	HeadSum = HeadA+HeadB,
      	polynome_sum(TailA, TailB, TailSum).

    На скриншоте показаны примеры использования предиката и полученные результаты:
    polynome_sum_prolog

Для ответа в этой теме необходимо авторизоваться.