# [plt-scheme] Quicksort in Scheme

--- Doug Orleans <dougorleans at gmail.com> wrote:
>*
*>* SRFI 1 has xcons:
*>*
*>* xcons d a -> pair
*>*
*>* (lambda (d a) (cons a d))
*>*
*>* Of utility only as a value to be conveniently passed to
*>* higher-order procedures.
*>*
*>* (xcons '(b c) 'a) => (a b c)
*>*
*>* The name stands for "eXchanged CONS."
*>*
*
Maybe something like this
>* (define snoc
* (lambda (l m)
(if (null? l) (list m)
(append (list (car l)) (snoc (cdr l) m)))))
>* (snoc '() 1)
*(1)
>* (snoc '(1 2 3) 4)
*(1 2 3 4)
That kind of gets back to something I posted awhile ago (maybe one of
my first here) where I was thinking about using data structures other
than lists. Presumably, it would be possible to use two-ended lists
like this, so long as both cons and snoc had inverses. I.e., something
equivalent to the invariants
(equal? a (car (cons a b)))
and
(equal? b (cdr (cons a b)))
===
Gregory Woodhouse <gregory.woodhouse at sbcglobal.net>
"If you give someone Fortran, he has Fortran.
If you give someone Lisp, he has any language he pleases."
--Guy L. Steele, Jr.