1

我在下面有一个此功能,可让它打印您输入的列表(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))))))
4

1 回答 1

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)))
          '()))))
于 2013-11-27T13:02:56.713 回答