Когда вы говорите «между 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))))
Racket уже предоставляет функцию range
, которую можно использовать в качестве эталонной реализации для тестирования.
Для случая (> l s)
может быть добавлено явное сообщение об ошибке (if будет преобразовано в cond): (raise-arguments-error 'intervalo "lower bound greater than upper bound" "lower" l "upper" s)