Сумма двух списков - 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).
Объяснение кода листинга программы
domains
- определение типа данных, используемых в программе. В данном случае, это целочисленный тип (integer*
).predicates
- определение пользовательскихpredicates. В данном случае, определен predicatesum_str
, который принимает три аргумента типаintl
.clauses
- определение правил (условий) для работы с predicates. В данном случае, определено три правила для работы с predicatesum_str
.- Правило
sum_str([],_,_):-write(
Error),nl,fail.
говорит о том, что если первый аргумент пуст, то программа выведет сообщение об ошибке и завершит работу. - Правило
sum_str(_,[],_):-write(
Error),nl,fail.
говорит о том, что если второй аргумент пуст, то программа выведет сообщение об ошибке и завершит работу. - Правило
sum_str([X|L],[Y|L1],[H|T]) :- H = X+Y,sum_str(L,L1,T).
говорит о том, что если в первом аргументе есть элементы, то программа вычисляет сумму соответствующих элементов второго аргумента и передает остальные элементы в следующую рекурсивную итерацию. - Правило
sum_str([X|L],[Y|L1],[H|T]) :- H = X+Y,!.
говорит о том, что если в первом аргументе есть элементы, то программа вычисляет сумму соответствующих элементов второго аргумента и завершает работу.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д