Сумма двух списков - 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,!.говорит о том, что если в первом аргументе есть элементы, то программа вычисляет сумму соответствующих элементов второго аргумента и завершает работу.