Написать процедуру трансляция-лимит, который находит


Из SICP:

Упражнения 3.64. Написать процедуру поток-предел, который принимает в качестве аргументов поток и количество (толерантность). Следует изучить поток, пока он не находит двух последовательных элементов, которые отличаются по абсолютной величине менее чем на толерантность, и вернуть второй из двух элементов. Пользуясь этим, мы сможет вычислять квадратные корни в учитывая толерантности

(define (sqrt x tolerance)
  (stream-limit (sqrt-stream x) tolerance))

Я писал этот ответ:

(define (stream-limit s tol)
  (if (stream-null? s) 
      (error "End of stream found before limit reached:" tol)
      (let* ((a (stream-car s))
             (b (stream-car (stream-cdr s)))
             (diff (abs (- a b))))
        (if (> tol diff) b (stream-limit (stream-cdr s) tol)))))

Его можно улучшить?



251
7
задан 27 июня 2011 в 01:06 Источник Поделиться
Комментарии
2 ответа

Выглядит нормально для меня. Я лишь предлагаю изменить (> тол дифф) к (< дифф тол) , потому что он читает больше как проблемы спецификации и проще для понимания.

1
ответ дан 17 сентября 2013 в 05:09 Источник Поделиться

Выглядит хорошо. Это ОК, чтобы просто сказать, что она хорошо выглядит? Если это не так, здесь два комментария:


  • Почему вы используете давайте* здесь? Не давайте достаточно?

  • Можно определить поток-кадр.

0
ответ дан 7 марта 2012 в 09:03 Источник Поделиться