如果我比较列表中的第一个和第二个元素,如何让它在最后一个元素上停止? [简单方案q]

时间:2011-11-07 09:09:56

标签: scheme logic

我是计划的初学者,我对逻辑有点困惑:

让我们说我想要一个列表中最大的数字,我不得不使用(第一个ns)和(第二个ns)

所以表达式包括:

(define (bigger ns)
        (cond
            .....
               ((> (first ns)(second ns) (cons.....(bigger (rest ns)))...))

如果我总是比较列表中的第一个元素和第二个元素,一旦它到达列表的最后一个元素,就不再有第二个元素可用了,这就会出现错误。我怎么在最后一个停止它?毕竟,没有最后的?功能使用。

2 个答案:

答案 0 :(得分:1)

快速回顾列表如何在Scheme中运行,因此它可能会更普遍地帮助您解决问题:

是两件事,firstrest。通常它用这样的点写成:(1 . 2)

列表是空列表,也称为null,或者是第二个(rest)列表的对。

所以如果你有一个这样的数字列表:(1 2 3 4 5)回想一下它实际上是一系列嵌套对: (1 . (2 . (3 . (4 . (5 . null)))))

所以,如果你在一系列对中递归,当你到达最后一对时,你就会知道它已经结束了,因为restnull

答案 1 :(得分:0)

(null? (rest ns)),你在最后一个元素时,最大值是当前元素(first ns),你可以停止递归。