拜托,您能解释一下if(用***记录的那部分)的作用是什么吗?给出的解释是它增加了(a)项的条件。但是,我认为在这种情况下必须写出如下内容:
(if (filter term a)
整个代码如下:
(define (filtered-accumulate combiner null-value term a next b filter)
(if (> a b)
null-value
(combiner (***if (filter a)
(term a)
null-value)***
(filtered-accumulate combiner null-value term (next a) next b filter))))
答案 0 :(得分:1)
它是if
,除了始终评估为某个值之外,它在其他语言中的工作方式与if
相同。因此,(filter a)
会被评估,如果它是真值(因此除了#f
之外的其他任何值),if
的结果就是(term a)
的结果。否则,变量null-value
的评估将成为结果。由于这是(combiner ...)
形式的参数位置中的表达式,因此该值将成为该形式的第一个参数。
combiner
和filter
都只是评估它们传递的变量,从代码到工作它们必须是函数,但是它们的名称并没有规定它们是如何被使用的。我不知道filter
是否需要一个或两个参数。可能是名称表明这是一个过滤谓词,然后它应该只接受一个参数。再次,只有受过教育的猜测,我可能是错的。