#lang scheme (require racket/trace) (define (append2 a b) (cond ((null? a) b) (#t (cons (car a) (append2 (cdr a) b))))) (trace append2) (define (my-equal? a b) (cond ((eqv? a b) #t) ((and (pair? a) (pair? b)) (and (begin (untrace my-equal?) (my-equal? (car a) (car b))) (my-equal? (cdr a) (cdr b)))) (#t #f))) (trace my-equal?) (define (sq x) (* x x)) ;(define (myfilter pred list) (define my-filter (lambda (pred list) (cond ((null? list) '()) ((pred (car list)) (cons (car list) (my-filter pred (cdr list)))) (#t (my-filter pred (cdr list)))))) (define (minimum list) (cond ((null? (cdr list)) (car list)) (#t (let ((m (minimum (cdr list)))) (if (< (car list) m) (car list) m))))) (define (my-min list) (cond ((null? (cdr list)) (car list)) (#t ((lambda (m) (if (< (car list) m) (car list) m) ) (my-min (cdr list)))))) (trace my-min) (define (split list) (cond ((null? list) (cons '() '())) ((null? (cdr list)) (cons list '())) (#t (let ((rest (split (cddr list)))) (cons (cons (car list) (car rest)) (cons (cadr list) (cdr rest))))))) ;(trace split) (define (merge a b) (cond ((null? a) b) ((null? b) a) ((<= (car a) (car b)) (cons (car a) (merge (cdr a) b))) (#t (cons (car b) (merge a (cdr b)))))) (define (merge-sort list) (cond ((null? list) '()) ((null? (cdr list)) list) (#t (let* ((s (split list)) (a (merge-sort (car s))) (b (merge-sort (cdr s)))) (merge a b)))))