Introduction to Scheme 2 Recursion: (define (fact n) (if (= n 0) 1 (* n (fact (- n 1))))) (define (fib1 n) (if (= n 0) 0 (if (= n 1) 1 (+ (fib1 (- n 1)) (fib1 (- n 2)))))) (define (fib2 n last curr) (if (= n 0) last (if (= n 1) curr (fib2 (- n 1) curr (+ last curr))))) Abstraction: ;; A simple locking mechanism ;; lock-item: item, passwd -> locked-item (define (lock-item item passwd) (lambda (key) (if (= key passwd) item (error)))) ;; unlock-item: locked-item, key -> item (define (unlock-item locked-item key) (locked-item key)) ;; A more complicated container mechanism ;; make-container: -> container (define (make-container) (lambda (cmd) (if cmd "" #f))) ;; add-to-container: container, item -> container (define (add-to-container container item) (lambda (cmd) (if cmd (string-append item "," (container)) container))) ;; remove-from-container: container, item -> container (define (remove-from-container container item) (if (string-starts-with (container #t) item) (container #f) (add-to-container (remove-from-container (container #f) item) (container #t)))) ;; list-contents: container -> string (define (list-contents container) (container #t))