摘要:介绍了scheme的高阶函数用法,利用高阶函数处理列表,以及将列表封装为流来实现惰性计算。
数据结构是编程的核心问题。是算法的基础。有了数据结构,对结构内的数据进行操作,才有了各种算法。lisp系的基本数据结构是列表,当然包括scheme。可以在某种方言中加入别的数据结构,例如映射,或者集合,但是这种数据结构的实现,或者以列表为底层,或者编译成其他语言的原生数据结构。因为lisp原生只有列表。如果只用lisp解释执行lisp,那么任意算法都至少是O(n)的时间复杂度。只有编译成其他语言,并引入地址或者引用的概念,能够随机地址读写,才能做到O(1)的最快效率。
基础简单的核心数据结构,带来的是更强大的元编程能力。lisp语言的实现,可以只依赖7个关键词。但是在工程而言,又未必是好事。因为工程上讲究的是快捷、实用,甚至可以牺牲部分绝对正确性,对于从头造轮子兴趣不大。
函数式编程最大的特点之一是高阶函数。可以把函数作为参数传递给另一个函数,也可以把函数作为返回值。利用高阶函数,可以达到在整体上操作列表的目的。例如常用的map、filter、foldr等函数。
它们的用法是:
(map lambda1 list1)
(filter lambda1 list1)
(foldr lambda1 list1)
它们的定义是:
(define (map lambda1 list1)
(if(null? list1)
'()
(cons (lambd