我一直试图使用尾递归的方案找到列表的长度,到目前为止,我有这个
(define num-els2
(lambda(xs)
mynum xs 0))
(define mynum
(lambda (xs empt)
(if (empty? xs)
empt
(mynum (rest xs) (+ empt 1)))))
但它一直给我0.我认为由于某种原因它不会增加我的返回值。那么我该如何解决这个问题?
答案 0 :(得分:3)
num-els2
程序中的括号有问题,没什么大不了的。基本上,您没有正确调用mynum
帮助程序,并且该过程始终返回0
,因为这是正文中的最后一个表达式。在这里,这应该解决它:
(define num-els2
(lambda(xs)
(mynum xs 0))) ; notice the opening bracket in this line
答案 1 :(得分:1)
Scheme为此提供了一个名为let的文件:
(define (list-length list)
(let loop ((list list)
(length 0))
(if (null? list)
length
(loop (cdr list) (+ length 1)))))
自R2RS(1985)以来,它是该标准的一部分。之前它被称为“迭代”。
指定的let规范是Iterations部分的一部分。