Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP
Posting-Version: version B 2.10 beta 3/9/83; site sdcrdcf.UUCP
Path: utzoo!watmath!clyde!burl!ulysses!unc!mcnc!decvax!ittvax!dcdwest!sdcsvax!sdcrdcf!markb
From: markb@sdcrdcf.UUCP
Newsgroups: net.lang.prolog
Subject: Fast list reverse
Message-ID: <1124@sdcrdcf.UUCP>
Date: Fri, 8-Jun-84 11:54:54 EDT
Article-I.D.: sdcrdcf.1124
Posted: Fri Jun  8 11:54:54 1984
Date-Received: Sun, 10-Jun-84 00:50:50 EDT
Reply-To: markb@sdcrdcf.UUCP (Mark Biggar)
Organization: System Development Corporation, Santa Monica
Lines: 24

Does any one have a faster list reverse routine then:

reverse([H|T],Y) :-
    rev1(H,[],T,Y).
reverse([],[]).

rev1(X,L,[],[X|L]).
rev1(X,L,[H|T],Y) :-
    rev1(H,[X|L],T,Y).

This appears to be O(n): n length of list.

The "usual" definition of reverse:

reverse([],[]).
reverse([H|T],X) :-
    reverse(T,T1),
    append(T1,H,X).

is O(n**2) at least.

Mark Biggar
{allegra,burdvax,cbosgd,hplabs,ihnp4,sdcsvax}!sdcrdcf!markb