#list #prolog #add
#Список #пролог #Добавить
Вопрос:
Я пытаюсь решить некоторые упражнения prolog, чтобы выучить язык, и у меня возникла проблема с добавлением чисел в список prolog.
Например, у меня есть список [1,2,3], и я хочу иметь на выходе номер 6.
Я написал этот код, но он не работает.
list_adder([H|T],S):- S is H T.
кто-нибудь может объяснить, почему?
Ответ №1:
попробуйте это:
list_adder([ ],0).
list_adder([X|L],Sum) :- list_adder(L,SL), Sum is X SL.
Комментарии:
1. Помните, что prolog работает рекурсивным образом. Вы пытаетесь добавить первый элемент из списка к остальной части списка. Т.е. в список из [1,2,3] вы пытаетесь добавить 1 [2,3]. Функция должна выполнить повторный просмотр остальной части списка.
Ответ №2:
Это потому, что H T
в примере сопоставляется с 1 [2, 3]
, что ничего не значит. Вы должны обработать [2, 3]
дальше, как показано в ответе четвертого.
Ответ №3:
list_adder(L,X),
list_adder(L,[],X).
list_adder([],L,X) :-
length(L,X).
list_adder([N|R1],L1,X) :-
length(L,N),
append(L1,L,L2),
list_adder(R1,L2,X).