Почему append(A,[X|B],L),append(A,B,C),sum_(C,X)
? Таким образом, вы хотите, чтобы сумма всех элементов, кроме X
, была равна X
.
Не ясно, какими должны быть аргументы existsSum
. Предположим, existsSum(InputList, SubList, Element)
:
existsSum(L,A,X) :- append(A,[X|_B],L), sum_(A,X).
На вашем примере вы получите следующие результаты:
?- existsSum([0,1,3,4,18,19], Sublist, Element).
Sublist = [],
Element = 0 ;
Sublist = [0, 1, 3],
Element = 4 ;
false.
Примечание: также []
и 0
- это решение из-за того, как вы определили предикат sum_
, т. Е. Сумма []
равна 0
.
Если вы измените предикат sum_
следующим образом:
sum_([X],X).
sum_([X|XS],R):- sum_(XS,R1),R is X + R1.
оно определено только для непустых списков, и в этом случае вы получите только один результат из вашего примера:
?- existsSum([0,1,3,4,18,19], Sublist, Element).
Sublist = [0, 1, 3],
Element = 4 ;
false.