Распространенное использование letrec, named let и внутренние определения? - PullRequest
4 голосов
/ 17 сентября 2010

У меня есть пара книг по Scheme, и некоторые из них упоминают названные let и letrec, но ни одна из них не даст убедительного примера каждой (я имею в виду, когда и почему я бы использовал одну вместо другой). Существуют ли примеры ситуаций, когда letrec / named let будет действительно лучшей альтернативой, чем внутреннее определение или даже внешняя вспомогательная процедура?

Ответы [ 2 ]

7 голосов
/ 18 сентября 2010

Какой из них вы используете, это в основном вопрос стиля.

Я не часто использую letrec, просто предпочитаю внутренние определения. Я использую named let довольно часто для написания хвостовых рекурсивных циклов, похожих на этот бессмысленный цикл.

(let loop ((var init) (other-var other-init))
  (cond
    ((done? var) var)
    ((finished? other-var) other-var)
    (else (loop (modify var) (manipulate other-var)))))

Вы можете сделать то же самое с letrec или внутренним определением, но я считаю, что это легче всего читать.

letrec может быть полезно при расширении макроса в места, в которых вы не хотите создавать определения.

0 голосов
/ 18 сентября 2010

Вероятно, лучшее объяснение разницы между этими формами - это .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...