fork download
  1. (begin (define (ZEDappend ZEDlist1 ZEDlist2) (cond (#t (append ZEDlist1 ZEDlist2)) (else err))) (define (ZEDcar ZEDpair) (cond (#t (car ZEDpair)) (else err))) (define (ZEDcdr ZEDpair) (cond (#t (cdr ZEDpair)) (else err))) (define (ZEDcons ZEDone ZEDtwo) (cond (#t (cons ZEDone ZEDtwo)) (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 list ZEDjumble)) (else err))) (define (ZEDsort02 ZEDcomparator ZEDjumble) (cond ((ZEDnull? ZEDjumble) (quote ())) ((ZEDnull? (ZEDcdr ZEDjumble)) ZEDjumble) (#t (ZEDsort02 ZEDcomparator (ZEDcons (ZEDmerge ZEDcomparator (ZEDcar ZEDjumble) (cadr ZEDjumble)) (ZEDsort02 ZEDcomparator (cddr 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 10952KB
stdin
(append) list1 list2
=========
#true
(003) "append" list1 list2
 
(car) pair
=========
#true
(002) "car" pair
 
(cdr) pair
=========
#true
(002) "cdr" pair
 
(cons) one two
=========
#true
(003) "cons" one two
 
(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) "list" 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 (002) "cadr" jumble
    (sort02) comparator (002) "cddr" jumble
stdout
(1 1 2 3 3 4 5 5 5 6 7 8 9 9 9)