2010-09-17 9 views
4

J'ai quelques livres sur Scheme, et certains d'entre eux mentionnent let let et letrec, mais aucun ne donnera vraiment un exemple convaincant de chacun (je veux dire, quand et pourquoi devrais-je utiliser l'un plutôt que l'autre). Existe-t-il des exemples de situations où letrec/named let serait vraiment une meilleure alternative qu'une définition interne, ou même une procédure auxiliaire externe?Utilisations courantes de letrec, nommé let et internal définit?

Répondre

7

Lequel vous utilisez est principalement une question de style.

Je ne me trouve pas souvent en utilisant letrec, préférant simplement les définitions internes. J'utilise assez souvent named pour écrire des boucles récursives, similaires à cette boucle non-sens.

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

Vous pouvez faire la même chose avec DEFINE letrec ou interne, mais je trouve celui-ci plus facile à lire.

letrec peut être utile lors d'une macro-expansion dans des endroits dans lesquels vous ne voulez pas créer de définitions.

0

Probablement la meilleure explication que vous pouvez trouver sur la différence entre ces formes est this.