Scheme函数只接受一个输入值而不是两个

时间:2013-11-27 12:53:19

标签: scheme racket r5rs

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

1 个答案:

答案 0 :(得分: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)))
          '()))))