【问题标题】:scheme: return a lst that only contains the first element of the lst方案:返回仅包含 lst 的第一个元素的 lst
【发布时间】:2012-09-15 19:01:45
【问题描述】:

问题来了:

编写一个函数(first-n-elements lst n),它返回一个列表,该列表仅包含lst 的第一个n 元素。例如,(first-n-elements '(1 2 3 4 5 6) 3) 应该返回 '(1 2 3)。您的函数应处理n 大于列表长度的情况(在这种情况下它将返回整个列表),并且n 为0(应返回'())。

我的答案是:

(define (first-n-elements lst n)
  (cond((null? lst) '())    
       ((= n 0) lst))   
       ((> n 0) (cons (+ (car lst) 1) (first-n-elements) (cdr lst) (- n 1))))

我知道错了,请帮忙

【问题讨论】:

    标签: scheme


    【解决方案1】:

    你有一个自然数和一个列表,你需要对它们进行递归。请参阅recursion on two complex arguments 上的本章。简短的回答是,您必须考虑两个论点的所有案例组合(本质上是笛卡尔积)。当然,您可能会发现某些案例可以合并在一起,但如果有疑问,请先分别考虑它们。

    【讨论】:

      【解决方案2】:

      部分问题说如果n 为0,它应该返回'()。但是当n为0时,你的函数会做什么呢?

      另外,考虑一下这里的递归情况 (> n 0)。您当前正在返回四个参数的 cons

      • (+ (car lst) 1)
      • (first-n-elements)
      • (cdr lst)
      • (- n 1)

      cons 只接受两个参数。你有所有的部分,但它们并没有完全正确地组合在一起。你想cons一起做什么?

      另外:你为什么要在(car lst) 上加 1?如果lst 中包含数字以外的内容,那将无法正常工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-05-29
        • 2015-09-09
        • 2021-08-03
        • 1970-01-01
        • 2017-08-28
        • 2019-09-27
        • 2017-03-29
        • 2020-09-20
        相关资源
        最近更新 更多