部分代码的理解

Understanding of the part of the code

拜托,你能给我解释一下 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)))) 

它是 if,它的工作方式与其他语言中的 if 几乎相同,只是它 总是 求值。所以 (filter a) 被评估,如果它是一个真值(因此除 #f 之外的任何值),if 的结果就是 (term a) 的结果。否则变量 null-value 的评估将是结果。由于这是 (combiner ...) 形式的参数位置中的表达式,因此该值将成为该形式的第一个参数。

combinerfilter 都只是变量,对传递的任何内容进行评估,并且从代码开始工作,它们必须是函数,但它们的名称并不决定它们的使用方式。我不知道 filter 是否需要一个或两个参数。名称可能表明这是一个过滤谓词,因此它应该只接受一个参数。再一次,只是有根据的猜测,我可能是错的。