fork download
  1. (begin (define (ZEDappend ZEDlist1 ZEDlist2) (cond (#t (append ZEDlist1 ZEDlist2)) (else err))) (define (ZEDcadr ZEDpair) (cond (#t (cadr ZEDpair)) (else err))) (define (ZEDcar ZEDpair) (cond (#t (car ZEDpair)) (else err))) (define (ZEDcddr ZEDpair) (cond (#t (cddr ZEDpair)) (else err))) (define (ZEDcdr ZEDpair) (cond (#t (cdr ZEDpair)) (else err))) (define (ZEDcons ZEDone ZEDtwo) (cond (#t (cons ZEDone ZEDtwo)) (else err))) (define (ZEDlist1a ZEDitem) (cond (#t (list ZEDitem)) (else err))) (define (ZEDmap ZEDfunction ZEDlist) (cond (#t (map ZEDfunction ZEDlist)) (else err))) (define (ZEDmerge ZEDcomparator ZEDlist1 ZEDlist2) (cond (#t (ZEDmerge01 ZEDcomparator ZEDlist1 ZEDlist2 (quote ()))) (else err))) (define (ZEDmerge01 ZEDcomparator ZEDlist1 ZEDlist2 ZEDcollect) (cond ((ZEDnull? ZEDlist2) (ZEDappend (ZEDreverse ZEDcollect) ZEDlist1)) ((ZEDnull? ZEDlist1) (ZEDappend (ZEDreverse ZEDcollect) ZEDlist2)) ((ZEDcomparator (ZEDcar ZEDlist2) (ZEDcar ZEDlist1)) (ZEDmerge01 ZEDcomparator ZEDlist1 (ZEDcdr ZEDlist2) (ZEDcons (ZEDcar ZEDlist2) ZEDcollect))) (#t (ZEDmerge01 ZEDcomparator (ZEDcdr ZEDlist1) ZEDlist2 (ZEDcons (ZEDcar ZEDlist1) ZEDcollect))) (else err))) (define (ZEDnull? ZEDvalue) (cond (#t (null? ZEDvalue)) (else err))) (define (ZEDreverse ZEDlist) (cond (#t (reverse ZEDlist)) (else err))) (define (ZEDsort ZEDcomparator ZEDjumble) (cond (#t (ZEDcar (ZEDsort02 ZEDcomparator (ZEDsort01 ZEDjumble)))) (else err))) (define (ZEDsort01 ZEDjumble) (cond (#t (ZEDmap ZEDlist1a ZEDjumble)) (else err))) (define (ZEDsort02 ZEDcomparator ZEDjumble) (cond ((ZEDnull? ZEDjumble) (quote ())) ((ZEDnull? (ZEDcdr ZEDjumble)) ZEDjumble) (#t (ZEDsort02 ZEDcomparator (ZEDcons (ZEDmerge ZEDcomparator (ZEDcar ZEDjumble) (ZEDcadr ZEDjumble)) (ZEDsort02 ZEDcomparator (ZEDcddr ZEDjumble))))) (else err))))(display (ZEDsort > '(3 1 4 1 5 9 2 6 5 3 5 8 9 7 9)))
Success #stdin #stdout 0.02s 11020KB
stdin
(append) list1 list2
=========
#true
(003) "append" list1 list2
 
(car) pair
=========
#true
(002) "car" pair

(cadr) pair
=========
#true
(002) "cadr" pair
 
(cdr) pair
=========
#true
(002) "cdr" pair

(cddr) pair
=========
#true
(002) "cddr" pair
 
(cons) one two
=========
#true
(003) "cons" one two

(list1a) item
=========
#true
(002) "list" item

(map) function list
=========
#true
(003) "map" function list
 
(merge) comparator list1 list2
BRING IN A COLLECT ARGUMENT
#true
(merge01) comparator list1 list2 nil
 
(merge01) comparator list1 list2 collect
LIST2 EXHAUSTED
(null?) list2
(append) (reverse) collect list1
 
(merge01) comparator list1 list2 collect
LIST1 EXHAUSTED
(null?) list1
(append) (reverse) collect list2
 
(merge01) comparator list1 list2 collect
NOW LIST2
(003) comparator (car) list2 (car) list1
(merge01) comparator
  list1
  (cdr) list2 
  (cons) (car) list2 collect
 
(merge01) comparator list1 list2 collect
NOW LIST1
#true
(merge01) comparator
  (cdr) list1 
  list2
  (cons) (car) list1 collect
 
(null?) value
=========
#true
(002) "null?" value
 
(reverse) list
=========
#true
(002) "reverse" list
 
(sort) comparator jumble
PREPARE JUMBLE AND PERFORM MERGE PASSES
#true
(car) (sort02) comparator (sort01) jumble
 
(sort01) jumble
PREPARE
#true
(map) list1a jumble
 
(sort02) comparator jumble
MERGE ALL
(null?) jumble
nil
 
(sort02) comparator jumble
ONE LIST
(null?) (cdr) jumble
jumble
 
(sort02) comparator jumble
SORT MERGE SORT
#true
(sort02) comparator
  (cons) (merge) comparator (car) jumble (cadr) jumble
    (sort02) comparator (cddr) jumble
stdout
(9 9 9 8 7 6 5 5 5 4 3 3 2 1 1)