S-expression
Source: Wikipédia sous licence CC-BY-SA 3.0.
La liste des auteurs de cet article est disponible ici.

Définition

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, ainsi que comme métalangage dans des protocoles de communication (La communication concerne aussi bien l'homme (communication intra-psychique, interpersonnelle, groupale...) que l'animal (communication intra- ou inter- espèces) ou la...) tels IMAP ou le langage CBCL (Common Business Communication Language) de John McCarthy (John McCarthy (né le 4 septembre 1927, à Boston, Massachusetts) est le principal pionnier de l'intelligence artificielle avec Marvin Minsky ; il incarne le courant mettant l'accent sur la logique...). Les détails de la syntaxe et les types de données (Dans les technologies de l'information (TI), une donnée est une description élémentaire, souvent codée, d'une chose, d'une transaction d'affaire, d'un événement, etc.) 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 utilisées par les programmeurs (la syntaxe concrète) ; mais les programmeurs Lisp ont tout (Le tout compris comme ensemble de ce qui existe est souvent interprété comme le monde ou l'univers.) de suite utilisé les s-expressions comme notation par défaut.

Les s-expressions peuvent être des objets simples, comme des nombres, des atomes (Un atome (du grec ατομος, atomos, « que l'on ne peut diviser ») est la plus petite partie d'un corps simple...) 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) 
 (cond 
 ((eq x 1)  1) 
 (t (* x (factorial (1- x)))))) 
 

Exemple en Scheme:

 
 (define (factorial x) 
 (if (= x 1) 
 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 ...) sans toucher (Le toucher, aussi appelé tact ou taction, est l'un des cinq sens de l'homme ou de l'animal, essentiel pour la survie et le développement des êtres vivants, l'exploration, la...) à 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, 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):

 
  
  
  
 x 
  
  
  
 * 
  
 2 
 x 
  
  
  
  
 
Page générée en 0.131 seconde(s) - site hébergé chez Amen
Ce site fait l'objet d'une déclaration à la CNIL sous le numéro de dossier 1037632
Ce site est édité par Techno-Science.net - A propos - Informations légales
Partenaire: HD-Numérique