Je comprends la différence entre LET et LET* (parallèle rapport séquentiel de liaison), et comme une question théorique, c'est logique. Mais est-il des cas où vous n'avez jamais vraiment besoin de le LAISSER? Dans l'ensemble de mon code Lisp que j'ai regardé récemment, vous pouvez remplacer tous les LAISSER à LAISSER* pas de changement.
Edit: OK, je comprends pourquoi certains gars inventé LET*, vraisemblablement sous forme d'une macro, le chemin du retour quand. Ma question est, étant donné que LET* existe, est-il une raison pour LAISSER à y rester? Avez-vous écrit tout réel du code Lisp où un LET* ne marcherait pas aussi bien comme une plaine LAISSER?
Je n'achète pas l'efficacité d'un tel argument. Tout d'abord, en reconnaissant les cas où LET* peut être compilé dans quelque chose d'aussi efficace que juste ne semble pas si difficile que ça. Deuxièmement, il y a beaucoup de choses dans la CL spec qui tout simplement ne semblent pas comme ils ont été conçus autour de l'efficacité à tous. (Quand la dernière fois vous avez vu une BOUCLE avec les déclarations de type? Celles-ci sont si dur à comprendre, je n'ai jamais vu utilisé.) Avant de Bite Gabriel repères de la fin des années 1980, CL est franchement lent.
Il ressemble à ce qui est un autre cas de rétro-compatibilité: bon escient, personne ne voulait prendre le risque de casser quelque chose d'aussi fondamental que de LAISSER. Ce qui était mon intuition, mais il est réconfortant de constater que personne n'a une stupidement simple cas j'ai été absent où LAISSER fait un tas de choses ridiculement plus facile que de LAISSER*.