零基础SICP:第1课
|
|
编程的基本原理
|
Elements of Programming
|
表达式 |
Expressions |
命名与环境 |
Naming and the Evironment |
组合式的求值 |
Evaluating Combinations |
复合函数 |
Compound Procedures |
函数应用的代换模型 |
The Subsitution Model for Procedure Application |
条件表达式和谓词 |
Conditional Expressions and Predicates |
编程的基本原理
|
|
编程(程序设计)的基本原理是什么
对数据和计算的组合和抽象
编程的基本原理
|
|
基本概念
基本概念的图示
表达式
|
|
定义
REPL:Read-Eval-Print Loop 读取→求值→打印 循环 (主体:Scheme解释器)
Scheme] |
486 ; 十进制 |
Scheme] |
(+ 137 349) ; 加法 |
Scheme] |
(* 1 2 3) |
Scheme] |
(/ 3.0 2) |
Scheme] |
(+ (+ 1 3) (/ 3.0 2)) |
Scheme] |
操作符和操作数 |
一个具体的例子 |
命名与环境
|
|
Scheme] |
(define pi 3.14159) |
Scheme] |
(define 半径 1) |
Scheme] |
(* pi (* 半径 半径)) |
Scheme] |
(define 周长 (* 2 (* pi 半径))) |
Scheme] |
周长 |
组合式的求值
|
|
对组合式求值(递归)
第一步:对组合式的子表达式求值
第二步:对参数应用函数
Scheme]
(* (+ 2 (* 4 6))
(+ 3 5 7)) ; 组合式
Scheme]
(* (+ 2 (* 4 6))
(+ 3 5 7))
Scheme]
(* (+ 2 (* 4 6))
(+ 3 5 7))
Scheme]
(* (+ 2 24)
(+ 3 5 7))
Scheme]
(* (+ 2 24)
(+ 3 5 7))
Scheme]
(* 26
(+ 3 5 7))
Scheme]
(* 26
(+ 3 5 7))
Scheme]
(* 26 15) ; 第一步已完成
Scheme]
390 ; 第二步已完成
函数分为两种,原语函数和复合函数。比如加减乘除就是原语函数。由用户自定义的函数称为复合函数。
Scheme] |
(define (求平方 x) (* x x)) |
Scheme] |
(求平方 3) |
Scheme] |
(define (⟨函数名⟩ ⟨形式参数列表⟩) ⟨主体⟩)
Scheme] |
(define (求平方和 x y) (+ (求平方 x) (求平方 y))) |
Scheme] |
(求平方和 1 2) |
Scheme] |
Scheme] |
(define (f a) (求平方和 (+ a 1) (* a 2))) |
Scheme] |
(f 5) |
Scheme] |
对组合式(f 5)求值
将函数f应用到参数5上面(注意参数、形式参数、操作数这三个概念的区别)
(求平方和 (+ a 1) (* a 2))
(求平方和 (+ 5 1) (* 5 2))
(求平方和 6 10)
(+ (求平方 6) (求平方 10))
(+ (* 6 6) (* 10 10))
(+ 36 100)
136
应用一个函数的代换模型——正则序求值
|
|
(求平方和 (+ a 1) (* a 2))
(求平方和 (+ 5 1) (* 5 2))
(+ (求平方 (+ 5 1)) (求平方 (* 5 2))
(+ (* (+ 5 1) (+ 5 1)) (* (* 5 2) (* 5 2)))
(+ 36 100)
136
问题
问题
条件表达式和谓词
|
|
Scheme] |
(define (求绝对值 x) (cond ((> x 0) x) ((= x 0) 0) ((< x 0) (- x)))) |
Scheme] |
(求绝对值 1) |
Scheme] |
(cond (⟨谓词1⟩ ⟨表达式1⟩)
(⟨谓词2⟩ ⟨表达式2⟩)
…
(⟨谓词N⟩ ⟨表达式N⟩))