【问题标题】:Scheme function to take only one input values instead of two方案函数只接受一个输入值而不是两个
【发布时间】:2013-12-13 03:08:26
【问题描述】:

我有一个 this 函数,它可以在下面打印您输入的列表(iota 1 10),因此在列表中打印数字 1-10(1 2 3 4 5 6 7 8 9 10)。我如何将其更改为仅取一个数字并仍从列表中的 1-(所选数字)打印。我只是想不通我应该怎么做。谢谢。

(define iota
(lambda(x y)
      (cond((> x y)
            '())
           (else
            (cons x
                  (iota (+ 1 x)y))))))

【问题讨论】:

    标签: scheme racket r5rs


    【解决方案1】:

    如果你想使用相同的方法,你可以倒计时(而不是倒计时)并使用append

    (define iota2
      (lambda (y)
        (if (< y 1)
            '()
            (append (iota2 (- y 1)) (list y)))))
    

    但这不是很有效。

    为什么不按原样保留iota 并使用

    (define iota2
      (lambda (y)
        (iota 1 y)))
    

    或者使用一个简单的循环(命名为let):

    (define iota2
      (lambda (y)
        (let loop ((n 1))
          (if (<= n y)
              (cons n (loop (+ n 1)))
              '()))))
    

    【讨论】:

    • 为什么倒计时效率不高?
    • 谢谢你,第一种方式是我需要的方式。我不能使用第二种方法,因为我的练习是尝试编写一个名为 iota 的函数。感谢您的帮助。
    • 使用append 效率低下,而不是使用cons
    • @AdamWilson 您仍然可以通过调用iota2 iota 和另一个iota_impl 或类似的方式来使用第二种方法。
    猜你喜欢
    • 1970-01-01
    • 2022-01-22
    • 2021-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-24
    • 2013-11-05
    • 1970-01-01
    相关资源
    最近更新 更多