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

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

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


From: Jacques Menu
Subject: Résolution de l'équation iScheme = infix (Scheme)
Date: Wed, 8 Jun 2022 18:41:22 +0200

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]