Функциональное программирование: элегантный способ прочитать поток целых чисел и вернуть список этих целых чисел - PullRequest
0 голосов
/ 01 октября 2019

Вот как я реализовал это в Racket.

(define (readInt)
  (define (readIntTail acc)
    (let ([i (read)])
      (if (integer? i) (readIntTail (cons i acc)) (reverse acc) )))
  (readIntTail null))

Пока это работает, мне было интересно, существует ли более элегантный способ сделать то же самое. Возможно без использования обратной функции.

1 Ответ

1 голос
/ 01 октября 2019

Вы можете cons целые числа без использования аккумулятора, если только вы не обязаны использовать хвостовую рекурсию:

(define (readInt)
  (let ((x (read)))
    (if (integer? x)
        (cons x (readInt))
        null)))
...