Мне нужен предикат, который плюс список списков в прологе с использованием чистой логики c и натуральных числовых обозначений. Например, для предиката:
?-totalPlus([ [s(0)],[s(0),s(0)],[s(s(0))] ], Res).
Результат должен быть следующим:
Res= s(s(s(s(s(0))))).
Это моя реализация, но она возвращает только плюс первого списка:
plusNat(0,X,X).
plusNat(s(X),Y,s(Z)):-plusNat(X,Y,Z).
plusList([],0).
plusList([X|Xs], S) :- plusList(Xs,SXs), plusNat(X,SXs,S).
totalPlus([],_).
totalPlus([X|Xs],Y):-totalPlus(Xs,_), plusList(X,Y).
------------------
?-totalPlus([ [s(0)],[s(0),s(0)],[s(s(0))] ], Res).
Res= s(0).
Заранее спасибо!