Lisp:如何编写高阶函数

时间:2009-10-15 04:24:39

标签: lisp scheme

我有这个问题要处理:

可以进一步推广和高阶过程以捕获将术语与固定运算符组合的想法。数学乘积算子是这个想法的一个具体例子,乘法取代了求和算子的加法。 从下面开始的程序累积旨在捕捉这个想法。 combiner参数表示用于减少术语的运算符,base参数表示当没有要组合的术语时返回的值。例如,如果我们已经实现了累积过程,那么我们可以将sum过程定义为:

(定义sum(accumulate + 0))

完成累积的定义,使其按照此描述行事。

          (define accumulate
             (lambda (combiner base)
                (lambda (term start next stop)
                   (if (> start stop)
                        ...
                        ...))))

我插入最后两行:

   base
   (combiner base (accumulate (combiner start stop) start next stop))

但是,我不知道这是否正确,也不知道如何实际使用sum过程来调用累积,从而总结数字。

1 个答案:

答案 0 :(得分:4)

This是学习如何钓鱼的好方法。好多了 而不是给一条鱼。

在此之前,以下是如何解决问题的方法。写一个 能做什么(累积+ 0)的功能。不要使用累积功能;只写一个defun,它做你的功课要求。接下来,编写一个可以执行(累积* 1)操作的函数。有什么相似之处,两个功能之间有什么区别。在大多数情况下,它们应该是相同的,除了+和*运算符的出现。

接下来,请注意,accumulate函数是返回一个函数,它看起来很像你之前写的两个函数。现在,使用您编写的两个函数非常相似的洞察力,想想如何将其应用于(defun accumulate ...)要返回的函数。