Пролог - Добавить список номеров - PullRequest
1 голос
/ 23 мая 2011

Я пытаюсь выполнить некоторые прологические упражнения, чтобы выучить язык, и у меня возникла проблема с добавлением чисел в список прологов.

Например, у меня есть список [1,2,3], и я хочу получить в качестве выходного числа 6.

Я написал этот код, но он не работает.

list_adder([H|T],S):- S is H + T.

Может кто-нибудь объяснить, почему?

Ответы [ 3 ]

2 голосов
/ 23 мая 2011

попробуйте это:

list_adder([ ],0).
list_adder([X|L],Sum) :- list_adder(L,SL), Sum is X + SL.
1 голос
/ 23 мая 2011

Это потому, что H + T в примере соответствует 1 + [2, 3], что ничего не значит.Вы должны обработать [2, 3] дальше, как показано в ответе Четвертого.

0 голосов
/ 23 мая 2011

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