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?
4
A
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.