J'essaye d'apprendre Lisp et regarde tous les Lisps là-bas et leurs différences.
Je vois que dans certaines implémentations de Scheme, vous pouvez utiliser des crochets de manière interchangeable avec des crochets pour la lisibilité, donc parce qu'ils sont traités de la même manière, je suppose qu'ils ne sont encore que des expressions S comme tout le reste.
Cependant, dans Clojure, je vois que les crochets et les accolades sont utilisés pour représenter différents types de données comme les vecteurs, etc. Ces expressions S sont-elles encore valides ou doivent-elles être considérées comme des atomes? Cela ne «casse»-t-il pas tout le concept des expressions S, faisant ainsi de Clojure un Lisp «impur»?
Réponses:
La notation littérale pour les vecteurs et les cartes (c'est-à-dire les crochets et les accolades) n'est que du sucre en lecture , et tout ce que vous pouvez représenter avec cette notation peut également être représenté avec des expressions S. En conséquence, il n'y a pas de perte de puissance ou d'homoiconicité, et en effet les macros de lecture (qui, je crois, sont encore plus puissantes) sont disponibles dans un certain nombre de lisps.
Soit dit en passant, Clojure fournit désormais un mécanisme pour créer des littéraux «balisés» personnalisés, qui, comme d'autres littéraux, sont transformés en expressions S avant d'être compilés et interprétés.
la source
Les expressions S sont une représentation textuelle des données. Nombres, symboles, contre-cellules, listes, chaînes, ... Common Lisp a également des représentations textuelles pour les tableaux, vecteurs, plus de types de nombres, caractères, ... Common Lisp fournit également un lecteur extensible par l'utilisateur, afin que l'utilisateur puisse ajouter plus de représentations textuelles pour les types de données. Parfois, ce mécanisme est également utilisé pour modifier la syntaxe du langage de programmation Lisp (par exemple pour prendre en charge des expressions infixées ou des instructions provenant d'autres langages de programmation).
Ainsi, si un dialecte Lisp offre des représentations textuelles pour des types de données supplémentaires, cela correspond bien à l'idée d'expressions s.
la source