garden/content/references/SICP 第一课.md
SouthFox cb37e6a77b
All checks were successful
/ deploy (push) Successful in 1m12s
[build] create dir
2024-06-04 14:52:49 +08:00

2.1 KiB
Raw Blame History

+++ title = "SICP 第一课" author = ["SouthFox"] date = 2022-09-02T22:17:00+08:00 lastmod = 2022-09-02T22:42:53+08:00 tags = ["publish"] draft = false +++

程序设计中要思考的问题是?

  • 程序是抽象的,不像电气设计中的考虑串联几千个放大器(因为要考虑误差等),程序设计是理想化的,可以考率不断循环下对于程序和设计有什么影响。

程序设计的三大想法?

  • 黑盒抽象 将简单的部分组合一个部件然后像积木一样不断堆积,这个部件对于外部是抽象的,可以拿来直接用的。
  • 约定接口
  • 元语言抽象

Lisp 基础 NODE

括号

Lisp 用括号来表达一个组合式,括号多的时候可以用缩进来减少对身心的损耗(

前缀

Lisp 是前缀表达语言,如:

(+ 1 2)

结果显示为 3 。

3

定义

用 DEFINE 关键词来定义一个过程(也叫 lambda通过一些基本过程搭建的过程来完成一个复杂的目的这就是黑盒。 例子:求平方根

(define (square-iter guess x)
  (if (good-enough? guess x)
      guess
      (begin ; used this compound procedure in order to be able to
        (display guess) ; display the intermediate guess values
        (newline)
        (square-iter (improve guess x) x)
      )
  )
)

(define (improve guess x)
  (average guess (/ x guess)))

(define (average x y)
  (/ (+ x y) 2))

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

(define (good-enough? guess x)
  (< (abs (- (square guess) x)) 0.001))

(define (sqrt x)
  (square-iter 1.0 x))

(define (square-iter-delta guess x)
  (if (in-delta? guess (improve guess x))
      guess
      (begin
        (display guess)
        (newline)
        (square-iter-delta (improve guess x) x)
      )
  )
)

(define (in-delta? guess1 guess2)
  (< (abs (- guess1 guess2)) 0.001))

(define (sqrt-delta x)
  (square-iter-delta 1.0 x))

(sqrt-delta 25)