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 10980KB
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
CONTINUE WITH COLLECT ARGUMENT
#true
(merge01) comparator list1 list2 nil
 
(merge01) comparator list1 list2 collect
LIST2 EXHAUSTED -> MERGED
(null?) list2
(append) (reverse) collect list1
 
(merge01) comparator list1 list2 collect
LIST1 EXHAUSTED -> MERGED
(null?) list1
(append) (reverse) collect list2
 
(merge01) comparator list1 list2 collect
TAKE FROM LIST2 (HANDLES ONE CASE)
(003) comparator (car) list2 (car) list1
(merge01) comparator
  list1
  (cdr) list2 
  (cons) (car) list2 collect
 
(merge01) comparator list1 list2 collect
TAKE FROM LIST1 (HANDLES TWO CASES)
#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 -> EXTRACT
#true
(car) (sort02) comparator (sort01) jumble
 
(sort01) jumble
PREPARED JUMBLE
#true
(map) list1a jumble
 
(sort02) comparator jumble
WHEN ZERO LISTS THEN NIL
(null?) jumble
nil
 
(sort02) comparator jumble
WHEN ONE LIST THEN ALREADY SORTED
(null?) (cdr) jumble
jumble
 
(sort02) comparator jumble
REPEATEDLY MERGE ALONG LENGTH
#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)