fork download
  1. (begin (define (ZEDappend ZEDlist1 ZEDlist2) (cond (#t (append ZEDlist1 ZEDlist2)) (else err))) (define (ZEDcons ZEDitem ZEDlist) (cond (#t (cons ZEDitem ZEDlist)) (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 (if (promise? (car ZEDlist2)) (force (car ZEDlist2)) (car ZEDlist2)) (if (promise? (car ZEDlist1)) (force (car ZEDlist1)) (car ZEDlist1))) (ZEDmerge01 ZEDcomparator ZEDlist1 (if (promise? (cdr ZEDlist2)) (force (cdr ZEDlist2)) (cdr ZEDlist2)) (ZEDcons (if (promise? (car ZEDlist2)) (force (car ZEDlist2)) (car ZEDlist2)) ZEDcollect))) (#t (ZEDmerge01 ZEDcomparator (if (promise? (cdr ZEDlist1)) (force (cdr ZEDlist1)) (cdr ZEDlist1)) ZEDlist2 (ZEDcons (if (promise? (car ZEDlist1)) (force (car ZEDlist1)) (car 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 (if (promise? (car (ZEDsort02 ZEDcomparator (ZEDsort01 ZEDjumble)))) (force (car (ZEDsort02 ZEDcomparator (ZEDsort01 ZEDjumble)))) (car (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? (if (promise? (cdr ZEDjumble)) (force (cdr ZEDjumble)) (cdr ZEDjumble))) ZEDjumble) (#t (ZEDsort02 ZEDcomparator (ZEDcons (ZEDmerge ZEDcomparator (if (promise? (car ZEDjumble)) (force (car ZEDjumble)) (car ZEDjumble)) (if (promise? (car (if (promise? (cdr ZEDjumble)) (force (cdr ZEDjumble)) (cdr ZEDjumble)))) (force (car (if (promise? (cdr ZEDjumble)) (force (cdr ZEDjumble)) (cdr ZEDjumble)))) (car (if (promise? (cdr ZEDjumble)) (force (cdr ZEDjumble)) (cdr ZEDjumble))))) (ZEDsort02 ZEDcomparator (if (promise? (cdr (if (promise? (cdr ZEDjumble)) (force (cdr ZEDjumble)) (cdr ZEDjumble)))) (force (cdr (if (promise? (cdr ZEDjumble)) (force (cdr ZEDjumble)) (cdr ZEDjumble)))) (cdr (if (promise? (cdr ZEDjumble)) (force (cdr ZEDjumble)) (cdr ZEDjumble)))))))) (else err))))(display (ZEDsort > '(1 2 4 3 5 6 8 7)))
Success #stdin #stdout 0.03s 10952KB
stdin
(append) list1 list2
=========
#true
(003) "append" list1 list2

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

(map) function list
=========
#true
(003) "map" function list
 
(merge) comparator list1 list2
BRING IN COLLECT
#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
COMPARATOR CHOOSES LIST2
(003) comparator (1) list2 (1) list1
(merge01) comparator
  list1
  (!) list2 
  (cons) (1) list2 collect
 
(merge01) comparator list1 list2 collect
NOW TAKE FROM LIST1 (PRIORITY STABILITY)
#true
(merge01) comparator
  (!) list1 
  list2
  (cons) (1) list1 collect
 
(null?) value
=========
#true
(002) "null?" value
 
(reverse) list
=========
#true
(002) "reverse" list
 
(sort) comparator jumble
PREPARE JUMBLE AND PERFORM MERGE PASSES
#true
(1) (sort02) comparator (sort01) jumble
 
(sort01) jumble
PREPARE
#true
(map) list1a jumble
 
(sort02) comparator jumble
EMPTY JUMBLE
(null?) jumble
nil
 
(sort02) comparator jumble
ONE LIST JUMBLE
(null?) (!) jumble
jumble
 
(sort02) comparator jumble
SORT MERGE SORT
#true
(sort02) comparator
  (cons) (merge) comparator (1) jumble (1) (!) jumble
    (sort02) comparator (!) (!) jumble
stdout
(8 7 6 5 4 3 2 1)