我的问题是: 给定两个自然数,返回一个列表,其中所有数字都在a和b之间
我尝试过了...
* (define (intervalo l s)(cond [(= l s)(make-list l)]
[(< l s)]
[(> l s) empty ])) *
答案 0 :(得分:1)
当您说“在a与b之间”时,是指仅包括下限吗?仅包括上限?还是同时包含两者?
让我们做出决定并考虑一个“半开放时间间隔”,即包括下限,但不包括上限
首先,考虑一下函数接收的数据类型。正如问题所指出的那样-自然数。现在让我们用一个简短的句子来表达这个问题:“从l到s的数字列表,包括l但不包括s”
一些例子:
从0到0的间隔将产生一个空列表
从1到3的间隔将导致(列表1 2)
从3到1的间隔是...?无效。
[精炼]需要添加一个“假设”:上限应小于或等于下限。
;; Nat Nat -> [Listof Nat]
;; all nats in [l, s) in order
;; ASUMPTION: (<= l s)
(define (intervalo l s)
(if (= l s) '() (cons l (intervalo (+ l 1) s))))
球拍已经提供了range
函数,可以用作测试的参考实现。
可以为(> l s)
情况添加一个明确的错误消息(如果将if转换为cond):(raise-arguments-error 'intervalo "lower bound greater than upper bound" "lower" l "upper" s)