Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 20/07/2012, à 00:44

Hibou57

Macros Scheme : remplacer des parenthèses ?

Bonsoir,

Je ne connais que très mal Scheme, et ne connais que SML. SML, bien que dérivé de LISP et étant un pure LISP, a une syntaxe quand‑même plus lisible que les classiques syntaxes concrètes typiques des autres LISP et qui ne reposent que sur les parenthèses. Par exemple il y a des constructions spécifiques avec ses if/else, let/in/end, case, et d’autres. Pas parfait, loin de Ada et la perfection de par exemple son if/elsif/else/end if, mais c’est déjà bien.

Sans vouloir blesser, il ne faut pas confondre syntaxe concrète et formalisme, et utiliser autre chose que des parenthèses pour les grandes expressions pour faciliter la lecture avec des marqueurs immédiatement reconnaissable pour le début et la fin de certaines expressions, ça ne peut pas faire de mal, et en tous les cas moins que le set! que Scheme connait et qui lui fait perdre de sa rigueur.

Ça c’était pour dire qu’il n’y a pas de mal à vouloir corriger la syntaxe, et que ce n’est pas ça qui dénature le fond.

Il semble que Scheme a un système de macros, mais je ne trouve aucun moyen de définir des macros qui permettent de remplacer les parenthèses de certaines expressions, par des mots‑clés. Par exemple, je voudrais pouvoir définir une macro qui interpréterait “begin-let” comme “(let” et “end-let” comme “)”.

Mais est‑ce possible avec le système de macro de Scheme ou est‑ce seulement impossible ? Je n’ai pas trouvé, mais je me demande si c’est par ignorance de ma part ou si c’est parce que c’est juste impossible.

En pratique, c’est pour Common Music que je me pose la question, et j’aurai peut‑être un autre problème, parce que j’ai l’impression que l’interpréteur Scheme de Common Music ne reconnait pas les définitions de macros. Dans le pire des cas alors, je me rabattrais sur SAL (Simple Algorithmic Language), qui a été conçu exprès pour Common Music et résoudre ce problème, mais je voulais juste quand‑même savoir, parce que ça peut être intéressant pour d’autres raisons, par exemple les DSL.


Voilà, … si des gens savent quelque chose…

Dernière modification par Hibou57 (Le 20/07/2012, à 00:47)


Hajimemashteeeee… \(^o^)/ Tachikoma desu (^_^;)
Le saviez‑vous : le j’m’en foutisme est la cause de la plupart des fléaux du monde contemporain.
Mangez des standards : un grand bol de Standard tous les matins, et vous débutez la journée en pleine forme !
bulleforum.net — Forum de discussions, La Bulle (papotage de la vie courante ou choses trop sérieuses)

Hors ligne

#2 Le 20/07/2012, à 03:29

Hibou57

Re : Macros Scheme : remplacer des parenthèses ?

Intéressant dans ce contexte, le choix des S‑expression pour la syntaxe concrète de LISP n’était censé n’être qu’une solution temporaire, et c’est une chose appelée M‑expression, qui devait être prévue pour ça, mais leur normalisation n’a pas aboutit et les implémenteurs ont donné la faveur aux S‑expressions, parce qu’elles étaient plus proches du modèle interne des implémentations des LISP d’alors.

Voir : M-expression (en.wikipedia.org)

Ça confirme deux choses. La première est que l’usage de S‑expressions partout, n’est pas une conséquence ou une nécessité de la sémantique du langage, pas plus qu’elle n’aide à l’exprimer. La seconde, est que le choix sur lequel s’est cristallisé la syntaxe concrète, était un choix dirigé par l’implémentation, et c’est le plus souvent un mauvais fil directeur pour une spécification : on spécifie d’abord, on implémente ensuite, pas le contraire, même si la spécification peut‑être incrémentale suite aux retours issus de l’expérience de l’usage d’une implémentation.

On y apprend aussi que la syntaxe concrète de SML, que je trouve meilleure que celle des autres LISP, est justement dérivée de ces M‑expression, et que SML fait partie des rares cas de mise en œuvres de ce que les M‑expression suggèrent pour la syntaxe des langages dérivés de LISP.

Intéressant cette histoire de M‑expression smile . À mettre dans les marques‑pages, et à étudier plus en détails.

Des gens d’ici en savent plus sur ces M‑expressions ?

Dernière modification par Hibou57 (Le 20/07/2012, à 03:36)


Hajimemashteeeee… \(^o^)/ Tachikoma desu (^_^;)
Le saviez‑vous : le j’m’en foutisme est la cause de la plupart des fléaux du monde contemporain.
Mangez des standards : un grand bol de Standard tous les matins, et vous débutez la journée en pleine forme !
bulleforum.net — Forum de discussions, La Bulle (papotage de la vie courante ou choses trop sérieuses)

Hors ligne

#3 Le 20/07/2012, à 13:12

Hibou57

Re : Macros Scheme : remplacer des parenthèses ?

Hibou57 a écrit :

En pratique, c’est pour Common Music que je me pose la question, et j’aurai peut‑être un autre problème, parce que j’ai l’impression que l’interpréteur Scheme de Common Music ne reconnait pas les définitions de macros.

En fait si, mais pas toutes, et celle qu’il ne reconnait pas, et justement celle que j’avais voulu essayer. Il utilise l’interpréteur S7 Scheme, dont la documentation dit :

S7 Scheme (https://ccrma.stanford.edu)

Description a écrit :

It does not have syntax-rules or any of its friends

Tant‑pis.

De toutes façons cette question avait aussi une raison, et à cette raison il est possible de tenter de répondre par une autre question, même si la question de ce topic pour elle‑même, reste ouverte.

Si des gens ont la réponse, ça m’intéresse toujours, même si je vais aborder le cas pratique autrement avec un autre topic.

Dernière modification par Hibou57 (Le 20/07/2012, à 13:14)


Hajimemashteeeee… \(^o^)/ Tachikoma desu (^_^;)
Le saviez‑vous : le j’m’en foutisme est la cause de la plupart des fléaux du monde contemporain.
Mangez des standards : un grand bol de Standard tous les matins, et vous débutez la journée en pleine forme !
bulleforum.net — Forum de discussions, La Bulle (papotage de la vie courante ou choses trop sérieuses)

Hors ligne