Вот как я реализовал это в Racket.
(define (readInt)
(define (readIntTail acc)
(let ([i (read)])
(if (integer? i) (readIntTail (cons i acc)) (reverse acc) )))
(readIntTail null))
Пока это работает, мне было интересно, существует ли более элегантный способ сделать то же самое. Возможно без использования обратной функции.