部分代码的理解
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 ...)
形式的参数位置中的表达式,因此该值将成为该形式的第一个参数。
combiner
和 filter
都只是变量,对传递的任何内容进行评估,并且从代码开始工作,它们必须是函数,但它们的名称并不决定它们的使用方式。我不知道 filter
是否需要一个或两个参数。名称可能表明这是一个过滤谓词,因此它应该只接受一个参数。再一次,只是有根据的猜测,我可能是错的。
拜托,你能给我解释一下 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 ...)
形式的参数位置中的表达式,因此该值将成为该形式的第一个参数。
combiner
和 filter
都只是变量,对传递的任何内容进行评估,并且从代码开始工作,它们必须是函数,但它们的名称并不决定它们的使用方式。我不知道 filter
是否需要一个或两个参数。名称可能表明这是一个过滤谓词,因此它应该只接受一个参数。再一次,只是有根据的猜测,我可能是错的。