Используйте соответствующие операторы сравнения
Как правило, для сравнения элементов в схеме предлагается использовать более «специализированный» оператор. Для чисел оператор равенства равен =
, а не eqv?
.
Проверьте ваши входные параметры
Если функция вызывается с помощью (odd-interval 3 2)
, Функциональные циклы навсегда. Таким образом, тест завершения должен быть (> low high)
или (>= low high)
, а не (= low high)
или (eqv? low high)
.
Использовать примитивные функции, если они доступны
odd?
уже доступен для проверки, является ли число нечетным.
Таким образом, функция может быть переписана как:
(define (odd-interval low high)
(cond ((> low high) '())
((odd? low) (cons low (odd-interval (+ low 1) high)))
(else (odd-interval (+ low 1) high))))
Примечание: вы можете использовать >=
вместо >
, если диапазон исключает последний элемент, который очень часто запрашивается.
Наконец, обратите внимание, что числа являются оценочными для себя, нет необходимости заключать их в кавычки, поэтому вместо:
(odd-interval '1 '9)
обычного способ написать:
(odd-interval 1 9)