CS 330 Lecture 32 – Scheme, Part II
Agenda
- why functional?
- why not functional?
- reverse engineering
- finish merge
- program this
- double, square, cosine
- higher-order functions
- map and filter
- variable-length argument lists
- symbolic differentiation
TODO
Reverse Engineering
Program This
Choose one or both:
- Write contains, which takes two arguments: a list and an atom. Return true if the list contains the atom.
- Write nth-element, which returns the the nth-element (starting at 0) of the list.
Code
clog.ss
(define clog
(lambda (n base)
(cond
((<= n 1) 0)
(else (+ 1 (clog (/ n base) base))))))
stuff.scm
(define calc-tax
(lambda (price) (* 1.055 price)))
(calc-tax 3.69)
;; ((lambda (price) (* 1.055 price)) 3.69)
(define !
(lambda (n)
(cond
((= n 0) 1)
(else (* n (! (- n 1)))))))
(define first car)
(define rest cdr)
(define merge
(lambda (a b)
(cond
((null? a) b)
((null? b) a)
; there's something in both a and b
; a wins
((> (first b) (first a)) (cons (first a) (merge (rest a) b)))
; b wins or tie
(else (cons (first b) (merge a (rest b)))))))
Haiku
Scheme got rid of VOID.
VOID checked out library books.
Never returned them.
VOID checked out library books.
Never returned them.