Вы можете быть более общим, проверьте, является ли число суммой чисел в списке.
Существует два базовых случая:
N является членом списка
sum(L, N) :-
member(L, N).
N может быть суммой двух чисел:
sum(L, N) :-
select(A, L, L1),
select(B, L1, _),
N is A+B.
Теперь общий случай:
sum(L, N):-
select(A, L, L1),
N1 is N-A,
N1 >= 0,
sum(L1, N1).
Обратите внимание, что этот код работает только для положительных чисел. Может бытьмного решений, поэтому мы можем просто проверить, что есть решение с Once / 1 .Итак:
check_sum(L, N) :-
once(sum(L, N)).
sum(L, N):-
select(N, L, _).
sum(L, N) :-
select(A, L, L1),
select(B, L1, _),
N =:= A+B.
sum(L, N):-
select(A, L, L1),
N1 is N-A,
N1 >= 0,
sum(L1, N1).