===== Tutorial 1 ===== * Introduction to IDE [[http://racket-lang.org/ | PLT DrRacket]] * Basic syntax, functions, atoms, lists, quote (define (is_even? ls) (if (null? ls) #t (is_odd? (cdr ls)) )) (define (is_odd? ls) (if (null? ls) #f (is_even? (cdr ls)) )) (define (is-even? ls) (if (null? ls) #t (if (null? (cdr ls)) #f (is-even? (cddr ls)) ))) (define (len ls) (if (null? ls) 0 (+ 1 (len (cdr ls)))) ) (define (last ls) (if (null? (cdr ls)) (car ls) (last (cdr ls)))) (define (without_last ls) (if (null? (cdr ls)) '() (cons (car ls) (without_last (cdr ls))))) (define (rev ls) (if (null? ls) '() (cons (last ls) (rev (without_last ls))))) (define (rev2 ls temp) (if (null? ls) temp (rev2 (cdr ls) (cons (car ls) temp)))) (define (efficient_rev ls) (rev2 ls '())) (define (mid ls) (mid2 ls ls)) (define (mid2 as bs) (if (null? (cdr as)) (car bs) (mid2 (cddr as) (cdr bs)))) ===== Tutorial 2 ===== (define (split ls) (cond ((null? ls) (cons '() '())) ((null? (cdr ls)) (cons ls '())) (else (let* ((a (car ls)) (b (cadr ls)) (rs (cddr ls)) (p (split rs)) ) (cons (cons a (car p)) (cons b (cdr p))) )))) (define (merge as bs) (cond ((null? as) bs) ((null? bs) as) ((<= (car as) (car bs)) (cons (car as) (merge (cdr as) bs))) (else (merge bs as)) ) ) (define (merge-sort ls) (cond ((null? ls) ls) ((null? (cdr ls)) ls) (else (let* ( (p (split ls)) (as (car p)) (bs (cdr p)) (sas (merge-sort as)) (sbs (merge-sort bs)) ) (merge sas sbs) ) ))) ===== Tutorial 3 ===== (define (my-map f ls) (if (null? ls) ls (cons (f (car ls)) (my-map f (cdr ls))) )) (define (full-map f ls . args) (if (null? ls) ls (let* ( (as (cons ls args)) (fs (my-map car as)) (fa (apply f fs)) (gs (my-map cdr as)) (rs (apply full-map f gs)) ) (cons fa rs) ))) (define (tr matrix) (apply map list matrix)) (define (list-update ls pos new) (if (= pos 0) (cons new (cdr ls)) (cons (car ls) (list-update (cdr ls) (- pos 1) new)))) (define (matrix-update matrix row col new) (if (= row 0) (cons (list-update (car matrix) col new) (cdr matrix)) (cons (car matrix) (matrix-update (cdr matrix) (- row 1) col new)))) ===== Tutorial 4 ===== (define (multiply . args) (if (null? args) 1 (* (car args) (apply multiply (cdr args))))) (define (fast-multiply . args) (if (null? args) 1 (if (= (car args) 0) 0 (* (car args) (apply fast-multiply (cdr args)))))) (define (super-fast-multiply . args) (define (mult exit) (define (m ls) (if (null? ls) 1 (if (= (car ls) 0) (exit 0) (* (car ls) (m (cdr ls)))))) (m args) ) (call-with-current-continuation mult) ) (define (fold-right f ls v) (if (null? ls) v (f (car ls) (fold-right f (cdr ls) v)))) (define (fold-left f v ls) (if (null? ls) v (fold-left f (f v (car ls)) (cdr ls)))) ===== Tutorial 5 =====