SICP lec1a: # Lisp overview
origin link sicp 1
Black box(module)
(* x (+ a b))
First scene: Every parentheses is a container called black box, we can take a and b as to varible, like number, electric signal, whatever, we add them, then mul or expand them x times.
tips
primitive elements + : operator
17.4 : number
means of combination (+ 3 17.4 5)
means of abstration It’s a tree, but we write it as a plain text formation.
define
varible:
(define a (* 5 5))
// the above a will be like 5 * 5(expression could be varible)
function:
(define (square x) (* x x))
(square (square (square 5)))
sweet:
(define square
(lambda (x) (* x x))
)
this seems like every define is a process.
condition:
(if (< x 100) (display "lower than 100"))
Recursive defination (Heron square root)
Hreon : get the square root of x
make a guess
improve guess by get the average of guess and x/guess
good-enough? done : improve guess
tips: good-enough? how close between x/guess (< abs (- (square guess) x) .001)
Analyze as a tree: (root 2) (try 1 2) (try (improve 1 2) 2) (try 1.5 2)
Important note:
(define a (* 5 5))
(define (d) (* 5 5))
output:
a -> 25
d -> d procedure
(d) -> 25
(a) -> error
Computing process
=================
kinds of expressions
number symbols
lambda definations conditionals
combinations
condition
if (define (+ x u) (if (= x 0) y (+ (-1 x) (1 y)) ) )
Fibonacci
(define (fib n)
(if (< n 2)
n
(+ (fib (- n 1))
(fib (- n 1))
)
)
)
tips: 1+ function means add args 1 and return
Hanoi Tower
(define (dohanoi n to from using)
(if (> n 0)
(begin
(dohanoi (- n 1) using from to)
(display "move ")
(display from)
(display " --> ")
(display to)
(newline)
(dohanoi (- n 1) to using from)
#t)
#f))
(define (hanoi n)
(dohanoi n 3 1 2))
- Post title:SICP lec1a: # Lisp overview
- Post author:ReZero
- Create time:2017-12-03 15:31:05
- Post link:https://rezeros.github.io/2017/12/03/sicp/
- Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.