练习2.36
虽然accumulate正在变得越来越复杂,但我还并未完全领悟到它的深刻意义。不过直觉告诉对于序列的序列,我们要做的是依次取出它每个序列的第一个元素。此方法来源于网络,我一直都是想着用lambda来写,最后感觉太复杂了。没想到一个map就解决了问题。
Lisp中的高阶函数果然不仅仅是函数那么简单,它能做的真是太多了。抽象也不是一般的抽象。简简单单的一个(map car seqs)便能把序列中的序列的第一个元素计算出来。有了这个技巧题目自然就有了答案。
(define (accumulate-n op init seqs)
(if (null? (car seqs))
‘()
(cons (accumulate op init (map car seqs))
(accumulate-n op init (map cdrseqs)))))
版权声明:本文为 NoMasp柯于旺 原创文章,未经许可严禁转载!欢迎访问我的博客:http://blog.youkuaiyun.com/nomasp
本文探讨了Lisp中高阶函数的使用,特别是如何利用mapcar处理序列的序列,以简洁的方式取出每个子序列的第一个元素。通过具体实例,展示了accumulate函数的递归应用,体现了Lisp强大的抽象能力和简洁的代码风格。
643

被折叠的 条评论
为什么被折叠?



