lilypond-user-fr
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Résolution de l'équation iScheme = infix (Scheme)


From: Bernard Barbier
Subject: Re: Résolution de l'équation iScheme = infix (Scheme)
Date: Wed, 8 Jun 2022 19:08:36 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.9.1

Hello,

L'idée est excellente, mais il faudrait un truc comme bison et flex pour parser le tout.  Et ça, je ne sais plus faire...

La biblio donne beaucoup de réponses sur Scheme to C, mais pas l'inverse, c'est que ça doit être graton comme on dit à Lyon.

Utile, je pense quand même : combien parmi les anciens (dont je fais partie) et même la jeunesse ont appris LISP à l'école (et même parfois sous la torture), juste pour le partiel de juin ?

Dès qu'on a compris que c'était un langage à pile, je pense qu'on a compris beaucoup de choses (d'mon temps, on apprenait même la notation polonaise inverse ! )

Du coup, Scheme devient relativement listble, mais... de là à être écrit... Donc utile, et ça vaudrait presque le coup d'y mettre un thésard en info !

C'était mon petit avis du soir.

Bon courage, bravo pour tous ces posts enrichissants, et bonne fin de journée à tous,

Bernard.

Le 08/06/2022 à 18:41, Jacques Menu a écrit :
Bonjour tutti,

Depuis que j’utilise LilyPond, le frein, voire le mur, que représente la syntaxe Scheme pour les utilisateurs lambda me turlupine. 
Pratiquement tous sont incapables de comprendre les solutions que les gentils aideurs comme Jean leur fournissent, sans parler de les adapter/ré-utiliser pour leurs besoins. En un mot, il ne peuvent pas être autonomes.

En y réfléchissant, on pourrait définir une syntaxe infixée au-dessus de Scheme, beaucoup proche de celles des langages ‘usuels’. Appelons-le iScheme.

La bascule en syntaxe iScheme pourrait se faire avec un @, par exemple. 

Ainsi :

#(define (grow-in-up-direction beam)
   (let* ((Y-positions (ly:grob-property beam 'positions))
          (left-position (car Y-positions))
          (right-position (cdr Y-positions)))
     (cond
       ((< left-position right-position)
        RIGHT)
       ((> left-position right-position)
        LEFT)
       (else
        CENTER))))

\relative c' {
  \override Beam.grow-direction = #grow-in-up-direction
  c'16 d e f g f e d c g c g c e g c
}

pourrait s’écrire avec iScheme:

@define grow-in-up-direction (beam) {
  let* {
    Y-positions    = ly:grob-property (beam, 'positions),
    left-position  = car (Y-positions),
    right-position = cdr (Y-positions);

    cond {
      left-position < right-position:
        RIGHT;

      left-position > right-position:
        LEFT;

      else:
        CENTER;
    }
  }
}

\relative c' {
  \override Beam.grow-direction = @grow-in-up-direction
  c'16 d e f g f e d c g c g c e g c
}

Les noms de fonctions s’écrivent avant la parenthèse contenant les arguments, qui sont séparés par des virugles.
Les accolades servent à structurer les choses.

Cerise sur le gâteux, les noms des fonctions de base comme define, let*, cond, if et else pourraient être dans d’autres langues que l’anglais.

Pensez-vous que cela pourrait être utile?

JM






reply via email to

[Prev in Thread] Current Thread [Next in Thread]