SICP

[TOC]

scheme

scheme语法

前缀表达式

正则序求值:完全展开而后归约。

这种求值模型是先不求出运算对象的值,直到实际需要它们的值时再去做。首先用运算对象表达式去替换形式参数,直到得到一个只包含基本运算符的表达式,然后在去执行求值。

应用序求值:先求值参数而后应用。

解释器将先对组合式的各个元素求值,即将过程体中的每一个形参用实参代替,然后在对这一过程体求值。

定义变量

(define var value)

例:

(define size 2)

过程(函数)定义

(define (⟨name⟩ ⟨formal parameters⟩) ⟨body⟩)

例:

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

条件表达式

(cond (⟨p_1⟩ ⟨e_1⟩) ​ (⟨p_2⟩ ⟨e_2⟩) ​ … ​ (⟨p_n⟩ ⟨e_n⟩))

例:

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

if表达式

(if ⟨predicate⟩ ⟨consequent⟩ ⟨alternative⟩)

例:

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

逻辑运算符

(and ⟨e_1⟩ … ⟨e_n⟩)

(or ⟨e_1⟩ … ⟨e_n⟩)

(not ⟨e⟩)

let表达式

(let ((⟨var_1⟩ ⟨exp_1⟩) ​ (⟨var_2⟩ ⟨exp_2⟩) ​ … ​ (⟨var_n⟩ ⟨exp_n⟩)) ⟨body⟩)

lambda表达式

(lambda ⟨formal parameters⟩ ⟨body⟩)

其他

运行scheme程序

scheme < test

define (sqrt-iter guess x)
  (if (good-enough? guess x)
      guess
      (sqrt-iter (improve guess x) x)))

##数学