toma@tekgvs.LABS.TEK.COM (Tom Almy) (10/17/90)
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); }