J'ai essayé de comprendre la différence entre Lisp-1 et Lisp-2 et comment cela se rapporte à Clojure, mais je ne comprends toujours pas correctement. Quelqu'un peut-il m'éclairer?
Réponses
Trop de publicités?Vous pouvez lire ce livre par Richard Gabriel. C'est un résumé des questions que la communauté Lisp discutaient dans Lisp1 vs Lisp2. C'est un peu dense et lent dans les premières sections, mais il est beaucoup plus facile à lire par le temps vous avez passé à la section 5.
Fondamentalement, Lisp1 a un seul et même environnement que les cartes de symboles, de valeurs, et ces valeurs peuvent être "régulière" ou de fonctions. Lisp2 a (au moins) deux espaces de noms (les symboles ont une fente pour une valeur de la fonction et un pour une valeur régulièrement). Ainsi, dans Lisp2, vous pouvez avoir une fonction nommée foo, et une valeur nommée foo, alors que dans Lisp1, le nom foo ne peuvent se référer qu'à une seule valeur (fonction ou autre).
Il existe plusieurs inconvénients et les différences de goût entre les deux, mais à lire l'article pour les détails. Christian Queinnec du livre, "Lisp en Petits Morceaux" dispose également de discussion des différences tissés à travers le texte.
Selon wikipedia:
Si un namespace pour les fonctions est un avantage est une source de discorde dans la communauté Lisp. Il est généralement désigné comme le Lisp-1 vs Lisp-2 débat. Lisp-1 désigne le Schéma du modèle et le Lisp-2 renvoie pour Common Lisp.
Il s'agit essentiellement de savoir si les variables et les fonctions peuvent avoir le même nom sans soucis. Clojure est un Lisp-1 ce qui signifie qu'il ne permet pas le même nom pour une fonction et une variable simultanément.