(define (ascendCheck lst pred) (cond ((empty? lst) #t) ((empty? (cdr lst)) #t) (else (and (pred (car lst) (car (cdr lst))) (ascendCheck (cdr lst) pred))) ) ) (define (ascendCheck2 lst pred) (define (ac lst) (cond ((empty? lst) #t) ((empty? (cdr lst)) #t) (else (and (pred (first lst) (second lst)) (ac (cdr lst)) ) ) ) ) (ac lst) ) (ascendCheck (list 1 2 3 4) <=) (ascendCheck (list 1 2 5 3 4) <=) (ascendCheck (list 4) <=) (ascendCheck '() <=) (ascendCheck '(2 4 6 8 10) <=) (ascendCheck2 '("apple" "banana" "cherry" "dog") string<=?) (ascendCheck2 '("apple" "berry" "banana" "cherry" "dog") string<=?) (ascendCheck2 '(1 2 3.0 3.3 3.33 4.56) <=) (member 1 '(1 2 3 4 5)) (member 10 '(1 2 3 4 5)) (if (member 1 '(1 2 3 4 5)) #t #f) (define (ins x lst pred) (if (empty? lst) (list x) (if (pred x (car lst)) (cons x lst) (cons (car lst) (ins x (cdr lst) pred)) ) ) ) (define (insort lst pred) (if (empty? lst) '() (ins (car lst) (insort (cdr lst) pred) pred) ) ) (insort (list 5 4 6 3 7 9 2 3) <=) (insort '("dog" "cat" "rat" "snake" "ape") string<=?) (define (insort3 lst pred) (define (ins x lst) (if (empty? lst) (list x) (if (pred x (car lst)) (cons x lst) (cons (car lst) (ins x (cdr lst))) ) ) ) (define (insort lst) (if (empty? lst) '() (ins (car lst) (insort (cdr lst))) ) ) (insort lst) ) (define (tmergesort lst pred) (define (merge lst1 lst2) (cond ((empty? lst1) lst2) ((empty? lst2) lst1) ((pred (car lst1) (car lst2)) (cons (car lst1) (merge (cdr lst1) lst2))) (else (cons (car lst2) (merge lst1 (cdr lst2)) ) ) ) ) (define (mergesort lst) (if (<= (length lst) 1) lst (let ((k (floor (/ (length lst) 2)))) (merge (mergesort (take lst k)) (mergesort (drop lst k)) ) ) ) ) (mergesort lst) ) (tmergesort '(5 7 3 4 2 9 1 0 6) <=) (define (quick2 lst pred) (define (quick lst) (if (<= (length lst) 1) lst (partition '() '() (cdr lst) (car lst)) ) ) (define (partition left right inLst piv) (define (part left right inLst) (cond ((empty? inLst) (append (quick left) (cons piv (quick right)))) ((pred (car inLst) piv) (part (cons (car inLst) left) right (cdr inLst))) (else (part left (cons (car inLst) right) (cdr inLst))) ) ) (part left right inLst) ) (quick lst) ) (quick2 '(5 7 3 4 2 9 1 0 6) <=)