Я хочу определить метод, который принимает целое число в качестве входных данных и динамически создает список всех убывающих целых чисел до нуля. Я нахожу проблемы в вызове метода для элемента n-1
Это не так уж и красиво, но это должно работать, протестировано в DrScheme.
(define (gen-list x ) (if (= x 0) (list 0) (cons x (gen-list (- x 1)))))
Теперь, когда это домашнее задание, я думаю, что хвостовая рекурсивная версия может быть альтернативой.
(define (gen-list x) (let lp ((n 0) (ret '())) (if (> n x) ret (lp (1+ n) (cons n ret)))))
Если вы используете схему PLT, библиотека пониманий позволит вам сделать это довольно аккуратно:
; natural -> (listof natural) (define (list-to-zero start-num) (for/list ([i (in-range start-num 0 -1)]) i))
Просто альтернатива рекурсивной форме ...