Prolog — Добавить номера списка

#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).