Quelle est la différence entre Lisp-1 et Lisp-2?

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 bien. Quelqu’un peut-il m’éclairer?

D’après wikipedia :

Si un espace de noms distinct pour les fonctions est un avantage est une source de conflit dans la communauté Lisp. Il est généralement appelé débat Lisp-1 vs. Lisp-2. Lisp-1 fait référence au modèle de Scheme et Lisp-2 fait référence au modèle de Common Lisp.

Il s’agit essentiellement de savoir si les variables et les fonctions peuvent avoir le même nom sans se heurter. Clojure est un Lisp-1, ce qui signifie qu’il ne permet pas d’utiliser le même nom pour une fonction et une variable simultanément.

Vous voudrez peut-être lire cet article de Richard Gabriel. C’est un résumé des problèmes dont la communauté Lisp a discuté dans Lisp1 vs Lisp2. C’est un peu dense et lent dans les premières sections, mais il est beaucoup plus facile de lire au moment où vous avez passé la section 5.

Fondamentalement, Lisp1 possède un environnement unique qui mappe les symboles aux valeurs, et ces valeurs peuvent être soit “régulières”, soit des fonctions. Lisp2 a (au moins) deux espaces de noms (les symboles ont un emplacement pour leur valeur de fonction et un pour une valeur régulière). 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 peut se référer qu’à une seule valeur (fonction ou autre).

Il y a plusieurs compromis et différences de goût entre les deux, mais lisez l’article pour plus de détails. Le livre de Christian Queinnec, “Lisp in Small Pieces”, discute également des différences tissées dans le texte.