Добавление целых чисел в список
По какой-то причине это не работает. Я получаю: ОШИБКА: is/2: Аргументы не достаточно созданы
1 add_list([]).
2 add_list([H|T]):-
3 Sum2 is Sum1 + H,
4 add_list(T).
Я пытаюсь добавить содержимое списка (содержащего только цифры).
3 ответа
Решение
Я не уверен, что ты пытаешься сделать. Но если вы пытаетесь подсчитать общую сумму, это будет так (смените имя на list_sum, так как add_list не имеет никакого смысла):
list_sum([], 0).
list_sum([H|T], Sum):-
list_sum(T, SubSum),
Sum is SubSum + H.
Вы можете иметь "функциональный ум" с помощью 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.
В качестве альтернативы вы также можете использовать аккумулятор (преимущество заключается в том, что он хвостовой рекурсии и, следовательно, может быть оптимизирован)
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).