版权声明:本文为博主原创文章,转载请注明出处:http://blog.jerkybible.com/2014/01/10/2014-01-10-练习1.31-练习1.34/
访问原文「练习1.31-练习1.34」
最近对于Lisp的强大和高深还是深有体会的,可以将函数作为参数进行调用,这样在很大的程度上可以提高函数的抽象性,即将具有公共模式的函数进行抽象。例如在SICP中,首先将累加和的过程进行了抽象,然后在累加和的基础上抽象出了累乘积,进而又发现了累加和与累乘积的共同点,进一步抽象成了一个叫做accumulate的函数,这个函数的是这样的
|
|
其中combiner为被组合项的组合方式,例如在累加和中可以是“+”,在累乘积中可以是“*”,null-value为默认值,在累加和中为0累乘积中为1,term为函数f,例如在求cube的积分时,f为cube,a为初始值,next为下一次取得值,b为取值的上限。最后在accumulate函数的基础上加上了对数据的filter使得整个过程更加抽象更加一般。
1.练习1.31
a)
|
|
|
|
|
|
b)
|
|
2.练习1.32a)
|
|
|
|
b)
|
|
3.练习1.33
|
|
a)
|
|
b)
|
|
4.练习1.34可以这么解释(f f)->(f 2)->(2 2),最后由于2这个函数没有定义,所以报错结束。
网上发现了这个点击打开链接,很不错,貌似是一些人做的项目,目的是解答SICP上的所有题,貌似很久没有更新了,但以后做了题还是可以和这个上面已有的解答对对了。