我有这个问题要处理:
可以进一步推广和高阶过程以捕获将术语与固定运算符组合的想法。数学乘积算子是这个想法的一个具体例子,乘法取代了求和算子的加法。 从下面开始的程序累积旨在捕捉这个想法。 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过程来调用累积,从而总结数字。
答案 0 :(得分:4)
This是学习如何钓鱼的好方法。好多了 而不是给一条鱼。
在此之前,以下是如何解决问题的方法。写一个 能做什么(累积+ 0)的功能。不要使用累积功能;只写一个defun,它做你的功课要求。接下来,编写一个可以执行(累积* 1)操作的函数。有什么相似之处,两个功能之间有什么区别。在大多数情况下,它们应该是相同的,除了+和*运算符的出现。
接下来,请注意,accumulate函数是返回一个函数,它看起来很像你之前写的两个函数。现在,使用您编写的两个函数非常相似的洞察力,想想如何将其应用于(defun accumulate ...)要返回的函数。