«Лучше» всегда открыт для определения, но немного более прямой / очевидный способ будет выглядеть примерно так:
(define (int->list n) (if (zero? n) `()
(append (int->list (quotient n 10)) (list (remainder n 10)))))
Что касается того, "хорошо", "плохо", "лучше" и т. Д., Я думаю, это зависит от того, что вы хотите. Нет сомнений в том, что вы можете найти более эффективный, универсальный и т. Д. Код (на самом деле @ user448810 уже опубликовал его). Это больше того, что я считаю примером кода для чего-то вроде введения в Scheme - акцент делается на простоте и легкости понимания / объяснения 1 . Я ожидаю, что почти любой человек с минимумом голой экспозиции с каким-либо языком, похожим на Лисп, и общим представлением о том, как осуществляется такое преобразование чисел, должен иметь возможность довольно быстро выяснить все, что здесь происходит легко.
- Даже за счет некорректного поведения в некоторых угловых случаях - например, как есть, он даже пытается корректно работать только для строго положительных чисел.