Добавление целых чисел в список - PullRequest
1 голос
/ 12 октября 2011

По какой-то причине это не работает.Я получаю: ОШИБКА: is / 2: Аргументы недостаточно созданы

1 add_list([]).
2 add_list([H|T]):-
3                 Sum2 is Sum1 + H,
4                 add_list(T).

Я пытаюсь добавить содержимое списка (содержащего только цифры).

Ответы [ 3 ]

3 голосов
/ 12 октября 2011

Я не уверен, что вы пытаетесь сделать.Но если вы пытаетесь подсчитать общую сумму, это будет так (измените имя на list_sum, так как add_list не имеет никакого смысла):

list_sum([], 0).
list_sum([H|T], Sum):-
    list_sum(T, SubSum),
    Sum is SubSum + H.
1 голос
/ 12 октября 2011

Вы можете иметь «функциональный ум» с помощью foldl:

foldl(_P, [], V, V).

foldl(P, [H|T], V1, VF) :-
    call(P, H, V1, V2),
    foldl(P, T, V2, VF).


sum_list(L, S) :-
    foldl(add, L, 0, S).


add(X, Y, Z) :-
    Z is X+Y.
0 голосов
/ 12 октября 2011

В качестве альтернативы вы также можете использовать аккумулятор (преимущество состоит в том, что он хвостовой рекурсивен и, следовательно, может быть оптимизирован)

list_sum(L,R) :- list_sum(L,0,R).   
list_sum([],A,A). 
list_sum([H|T],A,R) :- A1 is A + H, list_sum(T,A1,R).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...