module lplists.

% lambda Prolog lists

infixr (::) : 500.

append(nil, Y, Y).
append(X::Xs, Y, X::Z) <= append(Xs, Y, Z).

member(X, X::_).
member(X, _::Ys) <= member(X,Ys).

length(nil, 0).
length(_::Xs, N) <= length(Xs, N1) *- N is N1+1.

reverse(nil,nil).
reverse(X::Xs,Ys) <= reverse(Xs,Zs)
                  <= append(Zs,X::nil,Ys).

isEmpty(nil).
