S-expression
Une S-expression (ou expression symbolique) est une convention pour la représentation de données ou d'expressions d'un programme sous forme textuelle. Les S-expressions sont utilisées dans la famille de langages Lisp, incluant Scheme et DSSSL (en), ainsi que comme métalangage dans des protocoles de communication tels IMAP ou le langage CBCL (Common Business Communication Language) de John McCarthy. Les détails de la syntaxe et les types de données supportés diffèrent en fonction du langage, mais la propriété la plus commune est l'utilisation de la notation préfixée parenthésée (affectueusement connue sous le nom de Notation polonaise de Cambridge).
Rapports avec Lisp
Dans Lisp, les S-expressions sont utilisées à la fois pour le code et les données. Les S-expressions ont été conçues à l'origine comme des représentations machine de M-expressions (en) utilisées par les programmeurs (la syntaxe concrète) ; mais les programmeurs Lisp ont tout de suite utilisé les S-expressions comme notation par défaut.
Les S-expressions peuvent être des objets simples, comme des nombres, des atomes Lisp y compris nil et t, des paires notées (x . y). Des listes peuvent être formées avec des paires, par exemple (1 . (2 . (3 . nil))), qu'on peut écrire également (1 2 3).
Le code de programmes peut donc être écrit en s-expressions, avec la notation préfixée parenthésée.
Exemple en Lisp :
(defun factorial (x)
(if (zerop x) 1 (* x (factorial (1- x)))))
Exemple en Scheme:
(define (factorial x)
(if (= x 0)
1
(* x (factorial (- x 1)))))
Le choix des S-expressions pour la syntaxe de Lisp permet à cette famille de langages de proposer des systèmes de macros puissants permettant d'étendre la sémantique du langage (ajout d'opérateurs spéciaux, analyseurs de code, etc.) sans toucher à sa spécification ou modifier le compilateur (ou interpréteur). Cela explique que les M-Expressions aient peu été utilisées.
Rapports avec XML
Les S-expressions résolvent le même problème qu'XML avec, disent certains[Qui ?], beaucoup plus de légèreté et quarante ans d'avance. Les S-expressions peuvent donc servir de format pour du code (comme en Lisp) mais aussi pour des données. Mais elles ne permettent pas d'étiqueter les différents éléments (contrairement à d'autres concurrents de XML comme JSON ou YAML). Le programme Lisp :
(lambda (x) (* 2 x))
pourrait s'écrire en XML comme suit (d'après http://homepages.inf.ed.ac.uk/wadler/language.pdf):
<?xml version="1.0"?>
<lambda-term>
<variables-list>
<var>x</var>
</variables-list>
<expr>
<application>
<expr><const>*</const></expr>
<arguments-list>
<expr><const>2</const></expr>
<expr><var>x</var></expr>
</arguments-list>
</application>
</expr>
</lambda-term>
Liens externes
- (en) Une normalisation des S-expressions sur le site de Ronald Rivest
Content Disclaimer
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.
- The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
- There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
- It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
- Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.