# #eng-learning

SICP Ch. 1.1

• Big picture thinking about the programming process
• Abstraction and building software from general patterns
• Functions as data
• Contains three programming paradigms (functional, OOP, declarative)

# Why Scheme?

• Procedures as data
• It's simple
``````(* 25 4 12)
1200

(+ (* 3 (+ (* 2 4) (+ 3 5))) (+ (- 10 7) 6))

(+ (* 3
(+ (* 2 4)
(+ 3 5)))
(+ (- 10 7)
6))``````
``````(* (+ 2 (* 4 6))
(+ 3 5 7))``````

### Procedures

``````(define (square x) (* x x))

(define (square  x)        (*         x     x))
|        |     |          |         |     |
To     square something, multiply   it by itself``````

### Interpreter & Substitution

``````(sum-of-squares (+ 5 1) (* 5 2))

(+ (square 6) (square 10))

(+ (* 6 6) (* 10 10))

(+ 36 100)

136``````

### Interpreter & Substitution

``````(sum-of-squares (+ 5 1) (* 5 2))

(+    (square (+ 5 1))      (square (* 5 2))  )

(+    (* (+ 5 1) (+ 5 1))   (* (* 5 2) (* 5 2)))

(+         (* 6 6)             (* 10 10))

(+           36                   100)

136``````

Normal-Order Evaluation

### Conditionals

``````(define (abs x)
(cond ((> x 0) x)
((= x 0) 0)
((< x 0) (- x))))

(define (abs x)
(cond ((< x 0) (- x))
(else x)))

(define (abs x)
(if (< x 0)
(- x)
x))``````

### Block Structure

``````(define (sqrt x)
(define (good-enough? guess x)
(< (abs (- (square guess) x)) 0.001))
(define (improve guess x)
(average guess (/ x guess)))
(define (sqrt-iter guess x)
(if (good-enough? guess x)
guess
(sqrt-iter (improve guess x) x)))
(sqrt-iter 1.0 x))``````

"... programmer's must learn to understand and to anticipate the consequences of their conjuring."

🧙

#### SICP 1.1

By Anthony Morris

• 45