 
 
 
| 
 | 
| 
 | 
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) | ||
 
 
