(begin (define (ZEDappend ZEDlist1 ZEDlist2) (cond (#t (append ZEDlist1 ZEDlist2)) (else err))) (define (ZEDcons ZEDitem ZEDlist) (cond (#t (cons ZEDitem ZEDlist)) (else err))) (define (ZEDmain) (cond (#t (display (ZEDsort > (list 4 3 5 6 8 7 1 2)))) (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 (ZEDsort03 ZEDcomparator (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? (if (promise? (cdr ZEDjumble)) (force (cdr ZEDjumble)) (cdr ZEDjumble))) ZEDjumble) (#t (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))) (define (ZEDsort03 ZEDcomparator ZEDjumble) (cond ((ZEDnull? (if (promise? (cdr ZEDjumble)) (force (cdr ZEDjumble)) (cdr ZEDjumble))) (if (promise? (car ZEDjumble)) (force (car ZEDjumble)) (car ZEDjumble))) (#t (ZEDsort03 ZEDcomparator (ZEDsort02 ZEDcomparator ZEDjumble))) (else err))))(ZEDmain)