Сумма двух списков - Prolog

Узнай цену своей работы

Формулировка задачи:

Программа работает,но я хочу чтобы когда была разная длина у двух списков выводилось сообщение ERROR. А оно еще дополнительно выводит:
Как убрать этот Res? Пример вызова: ?- sum_str([1,2],[1,2,3,4],Res).

Решение задачи: «Сумма двух списков»

textual
Листинг программы
domains
intl=integer*
 
predicates
sum_str(intl,intl,intl)
 
clauses
sum_str([],_,_):-write("Error"),nl,fail.
sum_str(_,[],_):-write("Error"),nl,fail.
sum_str([X],[Y],[R]) :- R = X+Y,!.
sum_str([X|L],[Y|L1],[H|T]) :- H = X+Y,sum_str(L,L1,T).

Объяснение кода листинга программы

  1. domains - определение типа данных, используемых в программе. В данном случае, это целочисленный тип (integer*).
  2. predicates - определение пользовательскихpredicates. В данном случае, определен predicate sum_str, который принимает три аргумента типа intl.
  3. clauses - определение правил (условий) для работы с predicates. В данном случае, определено три правила для работы с predicate sum_str.
  4. Правило sum_str([],_,_):-write(Error),nl,fail. говорит о том, что если первый аргумент пуст, то программа выведет сообщение об ошибке и завершит работу.
  5. Правило sum_str(_,[],_):-write(Error),nl,fail. говорит о том, что если второй аргумент пуст, то программа выведет сообщение об ошибке и завершит работу.
  6. Правило sum_str([X|L],[Y|L1],[H|T]) :- H = X+Y,sum_str(L,L1,T). говорит о том, что если в первом аргументе есть элементы, то программа вычисляет сумму соответствующих элементов второго аргумента и передает остальные элементы в следующую рекурсивную итерацию.
  7. Правило sum_str([X|L],[Y|L1],[H|T]) :- H = X+Y,!. говорит о том, что если в первом аргументе есть элементы, то программа вычисляет сумму соответствующих элементов второго аргумента и завершает работу.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 3.833 из 5
Похожие ответы