球拍 - 给定两个自然数返回一个列表,其中所有数字在a和b之间



我的问题是:给定两个自然数量返回一个列表,其中所有数字之间的数字和b

之间

我尝试了...

 * (define (intervalo l s)(cond [(= l s)(make-list l)]
                             [(< l s)]
                             [(> l s) empty ])) *

当您说" 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)

最新更新