理解代码的一部分

时间:2018-01-15 14:10:46

标签: scheme sicp

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

1 个答案:

答案 0 :(得分:1)

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

combinerfilter都只是评估它们传递的变量,从代码到工作它们必须是函数,但是它们的名称并没有规定它们是如何被使用的。我不知道filter是否需要一个或两个参数。可能是名称表明这是一个过滤谓词,然后它应该只接受一个参数。再次,只有受过教育的猜测,我可能是错的。