1、各种求和过程可以抽象出来得到一个通用的求和过程(求和概念)
2、lisp的优势 :将函数也作为参数带入过程,再在过程中位函数分配参数。
(define (sum term a next b)
(if ((> a b) 0)
(+ (term a) (sum term (next a) next b)
3.如上面抽象出来的term函数和next函数作为了这个通用的求和过程的参数
term函数:参数a在求和过程中的表达函数
next函数:参数a在求和过程中的变化函数
4.通过而一切的通用求和过程,通用求连乘法过程、通用求连除过程,把它们的运算符抽象成combiner参数,所以又可以抽象得到一种范围更广的通用连续计算过程。甚至还可加上filter过滤函数做参数,再扩大这个过程包括的计算范围。
5.小结:抽象函数方法1:(堆积抽象)函数堆函数,抽象再抽象
抽象函数方法2:(归纳抽象)将一类函数抽象得到一个一般性函数
6.lambda函数:不用定义函数名,只指定参数和过程。
1.方便直接创建来做运算符。
2.还可以在放在参数位置
3.利用lambda的内部参数创建局部变量时
( lambda (<formal-parameter) <dody> )
7.let函数:不用定义函数名,只指定参数,参数的表达式(函数)和过程。
( let ( (<var> <exp>) ...... ......)
<body>) )
8.上面两种函数的过程<body>中,如果变量X没有在这一级定义,则它的值来自外部,如果X在这一级的定义了(无论是它被赋予一串表达式还是一个值),它调用的只能是这个本级的X。但是在这一级的定义X的时候<exp>,X被赋予的那串表达式的各种变量均来自外部(因为它自己的参数还没定义完,不能拿来用啊 -_- haha)
9.小结:区分好各种变量,让我们构造的函数表达的意义是我们所需要的。
10.如何写一个函数它接收一个函数做参数它返回另一个函数,并将它与一般性过程再度合并抽象。
11.牛顿法:f(x) 的不动点是 g(x)=0 的解。所以利用tansfrom函数将g(x)转化成f(x),通过求f(x)的fixed-point来求g(x)=0 的解。
小结:高阶函数利用过程作为返回值的过程,在一般性过程只上进一步抽象,