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