% This version of length taken from basics.P, as distributed with XSB
% Prolog.

% length/2 that works both ways
length(L,N) :-
	var(N)
	 ->	length1(L,N)
	 ;	length2(L,N).

length1([], 0).
length1([_|R], N) :- length1(R, N1), N is N1 + 1.

length2(L,N) :-
	N =< 0
	 ->	L=[]
	 ;	N1 is N-1, L=[_|L1],
		length2(L1,N1).


