% -*- Prolog -*-
%
% Accumulator-based list length.
%
% Shouldn't create any objects from Term subclasses.
%
% $Id: 205,v 1.6 2000/10/15 23:27:27 peteg Exp $

:- compile.
:- list(X) ::= [] ; [X | list(X)].

length(List, Length) :-
	length(List, 0, Length).

%length(List, 0, 3).

length([], L0, L0).
length([_|Xs], L, L0) :-
	L1 is L + 1,
	length(Xs, L1, L0).
% Normalised:
%length(_A0, _B0, _C0) :-
%        unify(_A0, []),
%        unify(_B0, _C0).
%length(_A0, _B0, _C0) :-
%        unify(_A0, [_D0|_E0]),
%        unify(_G0, +(_H0, _I0)),
%        unify(_B0, _H0),
%        unify(_I0, 1),
%        is(_F0, _G0),
%        length(_E0, _F0, _C0).

main :-
	length([0, 1, 2], L),
	write(L),
	nl.
