(define (length2 item)
(if (null? item)
0
(+ 1 (length2 (cdr item)))))
这是我制作的递归版本,但我真的在努力使其成为迭代版本。我对两者之间的区别有了很好的理解。在递归中它只增加+1,当它到达结尾时,它将所有1加在一起,而在迭代中它每一步计算它。(如果我误解了,请随时告诉我。)
你们有没有任何想法如何使它成为迭代和一些提示让我在Scheme中更好地理解它?
很抱歉,如果这是一个微不足道的问题,但我对这种语言和函数式编程相当新。
答案 0 :(得分:0)
您可以添加count
变量以使其迭代并跟踪长度
(define (length2 item count)
(if (null? item)
count
((length2 (cdr item) (+ count 1)))))
修改强>
按照上面定义的方式,您需要为length2
调用0
的初始值为count
的过程。
如果您不想这样做,那么您可以制作一个中间函数来处理这个问题。它看起来像这样
(define (actual_length item count)
(if (null? item)
count
((actual_length (cdr item) (+ count 1)))))
(define (length2 item) (length2 item 0))
现在,您可以正常调用length2
程序,例如
(length2 the_list)