Les crochets et les accolades dans Clojure sont-ils toujours des expressions S?


12

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»?


Techniquement "si les crochets sont des expressions s, comment pouvez-vous les exprimer avec des parenthèses à la place?" ne faisait pas partie de la question, mais c'est ce que je veux savoir.
Qwertie

Réponses:


10

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.


1
Mmm, ta réponse me fait penser que je comprends moins que je ne pensais comprendre sur Lisp. Donc, ce que vous dites (je pense), c'est que les crochets et les crochets ne sont en fait pas des expressions S elles-mêmes. Je pensais que l'idée avec l'entrée Lisp était que tout était une expression S. On dirait que je dois creuser un peu plus avant de revenir pour relire votre réponse. Merci!
mydoghasworms du

C'est vrai - ce ne sont pas des expressions S. La syntaxe Lisp commence par les expressions S, en ce sens que tout ce qui peut être exprimé dans le langage peut être exprimé avec les expressions S. Mais la syntaxe Lisp ne s'arrête pas là: de nombreux compilateurs Lisp ont une phase de macro de lecture explicite, dans laquelle les modèles spéciaux du code source sont transformés en expressions S. Cela permet aux auteurs de langage d'offrir aux programmeurs une syntaxe conviviale. La chose importante à noter est que parce que tout ce qui est représenté avec ces littéraux spéciaux peut également être représenté dans des expressions S, aucun des avantages de l'homoiconicité n'est perdu.
tvachon

3

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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.