【问题标题】:If I compare the first and second element in a list, how do I make it stop on the last one? [simple scheme q]如果我比较列表中的第一个和第二个元素,如何让它停在最后一个? 【简单方案q】
【发布时间】:2013-09-05 21:21:50
【问题描述】:

我是方案的初学者,我对逻辑有点困惑:

假设我想要列表中的最大数字,我必须使用 (first ns) 和 (second ns)

所以表达式将包括:

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

如果我总是比较列表中的第一个元素和第二个元素,一旦到达列表的最后一个元素,将不再有第二个元素可用,这会引发错误。我如何在最后一个停止它?毕竟,没有最后?要使用的函数。

【问题讨论】:

    标签: scheme logic


    【解决方案1】:

    快速回顾一下列表在 Scheme 中的工作原理,因此它可能会更普遍地帮助您解决困惑:

    pair 是两个东西,一个first 和一个rest。通常它是用这样的点写的:(1 . 2)

    list 要么是空列表,也称为 null,要么是第二个对象(其 rest)是一个列表的一对。

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-11-27
        • 1970-01-01
        • 2023-03-29
        • 2019-11-14
        • 1970-01-01
        • 2016-11-25
        • 1970-01-01
        相关资源
        最近更新 更多