【发布时间】:2021-05-31 22:53:37
【问题描述】:
我有以下accumulate函数:
; accumulate
(define (accumulate op initial sequence)
(if (null? sequence)
initial
(op (car sequence) (accumulate op initial (cdr sequence)))))
我正在尝试编写一个length 函数来使用accumulate 函数获取序列的长度。
对于插入accumulate的函数,为什么是(+ y 1)而不是(+ x 1)?这是我想不通的部分:
(define (length sequence)
(accumulate (lambda (x y) (+ x 1)) ; wrong
0
sequence))
(define (length sequence)
(accumulate (lambda (x y) (+ y 1)) ; correct
0
sequence))
【问题讨论】:
-
通过适当的缩进,您会立即看到它。 pay attention to types,发生了什么。请参阅
list?以及该答案中围绕它的讨论。 -
@tf3 啊,是的,你已经把手指放在上面了。它应该是在我们进行时应该是不言而喻的。如果不是,则意味着读者需要返回并重新阅读,直到它是!在这方面,观看视频也应该有所帮助。
标签: scheme lisp fold sicp accumulate