#lang racket (define (fib n) (if (<= n 1) n (+ (fib (- n 1)) (fib (- n 2))))) (define minus-fact-of-36 (let ([v (fib 36)]) (displayln "fib 36") (lambda (x) (- x v)))) (define minus-fact-of-37 (lambda (x) (let ([v (fib 37)]) (displayln "Did 37") (- x v)))) (define increment-and-return1 (let ([v 0]) (lambda (x) (begin (set! v (+ x v)) v)))) (define increment-and-return2 (lambda (x) (let ([v 0]) (begin (set! v (+ x v)) v)))) (define a-lst (list (cons 1 2) (cons "Cody" "Schroeder") (cons 42 #t))) ;; (displayln (assoc 1 a-lst)) ; (1 . 2) ;; (displayln (assoc "Cody" a-lst)) ; (Cody . Schroeder) ;; (displayln (assoc 42 a-lst)) ; (42 . #t) ;; (displayln (assoc "NON-EXISTANT-KEY" a-lst)) ; #f (define memo-fib (let ([memo '((0 . 0) (1 . 1))]) (lambda (n) (let ([prev-ans (assoc n memo)]) (if prev-ans (cdr prev-ans) (let ([ans (+ (memo-fib (- n 1)) (memo-fib (- n 2)))]) (set! memo (cons (cons n ans) memo)) ans))))))