我是计划的初学者,我对逻辑有点困惑:
让我们说我想要一个列表中最大的数字,我不得不使用(第一个ns)和(第二个ns)
所以表达式包括:
(define (bigger ns)
(cond
.....
((> (first ns)(second ns) (cons.....(bigger (rest ns)))...))
如果我总是比较列表中的第一个元素和第二个元素,一旦它到达列表的最后一个元素,就不再有第二个元素可用了,这就会出现错误。我怎么在最后一个停止它?毕竟,没有最后的?功能使用。
答案 0 :(得分:1)
快速回顾列表如何在Scheme中运行,因此它可能会更普遍地帮助您解决问题:
对是两件事,first
和rest
。通常它用这样的点写成:(1 . 2)
列表是空列表,也称为null
,或者是第二个(rest
)列表的对。
所以如果你有一个这样的数字列表:(1 2 3 4 5)
回想一下它实际上是一系列嵌套对:
(1 . (2 . (3 . (4 . (5 . null)))))
所以,如果你在一系列对中递归,当你到达最后一对时,你就会知道它已经结束了,因为rest
是null
。
答案 1 :(得分:0)
当(null? (rest ns))
,你在最后一个元素时,最大值是当前元素(first ns)
,你可以停止递归。