Path: utzoo!mnetor!tmsoft!torsqnt!jarvis.csri.toronto.edu!cs.utexas.edu!usc!ucsd!helios.ee.lbl.gov!pasteur!icsi.Berkeley.EDU!stolcke From: stolcke@icsi.Berkeley.EDU (Andreas Stolcke) Newsgroups: comp.lang.prolog Subject: Re: Definition of list_length/2 Message-ID: <22095@pasteur.Berkeley.EDU> Date: 14 Feb 90 19:13:42 GMT References: <3179@munnari.oz.au> <2733@swi.swi.psy.uva.nl> Sender: news@pasteur.Berkeley.EDU Reply-To: stolcke@icsi.Berkeley.EDU (Andreas Stolcke) Organization: International Computer Science Institute, Berkeley Lines: 32 In article <3179@munnari.oz.au>, lee@munnari.oz.au (Lee Naish) writes: > > list_length_non(Xs, N) :- > list_length_non_ac(Xs, 0, N). > > list_length_non_ac([], N, N). > list_length_non_ac([_|Xs], N0, N) :- > N1 is N0 + 1, > list_length_non_ac(Xs, N1, N). > To avoid endless recursion after the first (and only) solution to length( -L, +N), while still allowing unrestricted backtracking for length( -L, -N): length(Xs, N) :- length(Xs, 0, N). length([], N, N). length([_|Xs], N0, N) :- ( var( N ), ! ; N0 < N ), N1 is N0 + 1, length(Xs, N1, N). ---- Andreas Stolcke International Computer Science Institute stolcke@icsi.Berkeley.EDU 1957 Center St., Suite 600, Berkeley, CA 94704 (415) 642-4274 ext. 126