🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: comp.lang.lisp.x
Article #148

Implementation of NREVERSE

#148
From: Tom Almy
Date: Tue, 16 Oct 1990 17:25
55 lines
1551 bytes
Here is a definition of NREVERSE I added recently. It follows the
Common LISP convention of working on any sequence (list, array, string).

Tom Almy
toma@tekgvs.labs.tek.com
Standard Disclaimers Apply


/* xnreverse -- built-in function nreverse (destructive reverse) */
LVAL xnreverse()
{
    LVAL seq,val,next;
	unsigned int i,j;
	int ival;

    /* get the sequence to reverse */
    seq = xlgetarg();
    xllastarg();

    if (seq == NIL) return (NIL);	/* empty argument */
	
    switch (ntype(seq)) {
	case CONS:
	    val = NIL;
	    while (consp(seq)) {
		next = cdr(seq);
		rplacd(seq,val);
		val = seq;
		seq = next;
	    }
	    break;
	case VECTOR:
	    for (i = 0, j = getlength(seq)-1; i < j; i++, j--) {
		val = getelement(seq,i);
		setelement(seq,i,getelement(seq,j));
		setelement(seq,j,val);
	    }
	    return seq;
	    break;
	case STRING:
	    for (i = 0, j=getslength(seq)-2 ; i < j; i++, j--) {
		ival = seq->n_string[i];
		seq->n_string[i] = seq->n_string[j];
		seq->n_string[j] = ival;
	    }
	    return seq;
	    break;
	default: 
	    xlbadtype(seq); 
	    break;
	}

    /* return the sequence */
    return (val);
}
Technical Details
Message-ID: <8276@tekgvs.LABS.TEK.COM>
Path: arc1-ca.pugleaf.net!utzoo!attcan!uunet!zephyr.ens.tek.com!tekchips!tekgvs!toma

Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!utzoo!attcan!uunet!zephyr.ens.tek.com!tekchips!tekgvs!toma
From: toma@tekgvs.LABS.TEK.COM (Tom Almy)
Newsgroups: comp.lang.lisp.x
Subject: Implementation of NREVERSE
Message-ID: <8276@tekgvs.LABS.TEK.COM>
Date: 16 Oct 90 17:25:05 GMT
Reply-To: toma@tekgvs.LABS.TEK.COM (Tom Almy)
Organization: Tektronix, Inc., Beaverton,  OR.
Lines: 55