web-dev-qa-db-fra.com

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

89
Zubair

Selon wikipedia :

La question de savoir si un espace de noms distinct pour les fonctions est un avantage est une source de discorde 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 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.

60
pauldoo

Vous pourriez aimer lire ceci papier par Richard Gabriel. Il s'agit d'un résumé des problèmes abordés par la communauté LISP dans LISP1 vs LISP2. C'est un peu dense et lent dans les premières sections, mais il est beaucoup plus facile à lire au moment où vous passez 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 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 le papier pour les détails. Le livre de Christian Queinnec, "LISP in Small Pieces" a également une discussion sur les différences tissées à travers le texte.

65
Peter McLain