The problem is related to your last sentence:
deep_sum([X|Y], M, N) :- M is P+Q, deep_sum(X,P,N), deep_sum(Y,Q,N).
The direct problem of the error is that neither P nor Q matter at runtime M is P+Q. Just moving it to the back will not solve, however, the proposal has more problems.
. deep_sum(X,P,N) , N - (X), P ". : P , N - , .
. Q , N. , N 3 : , ! , - .
, . N ) , ) ) . a b : : deep_sum(X, M, N1). N1 . . , N1 , , .
, :
deep_sum([X|Y], M, N) :-
deep_sum(X, M, N1),
deep_sum(Y, N1, N).
deep_sum/3 :
deep_sum(X, M, N) :-
number(X),
N is M + X.
deep_sum([], N, N).
deep_sum([X|Y], M, N) :-
deep_sum(X, M, N1),
deep_sum(Y, N1, N).
:
- ; , , .
number/1 atomic/1, .- , .