p(X, Y) -->
q(X),
r(X, Y),
s(Y).
p(X, Y, Start, End) :-
q(X, Start, A),
r(X, Y, A, B),
s(Y, B, End).
assign(X,Y,Start,End) :-
left(X, Start, A),
A=[:=|B],
right(Y, B, C),
C=[;|End].
assign(X,Y,Start,End) :-
left(X, Start, A),
A=[:=|B],
right(Y0, B, C),
Y is Y0,
C=[;|End].
| List is neither a list nor a partial list | type_error(list, List) | ||
| Remainder is neither a list nor a partial list | type_error(list, Remainder) | ||