|
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 |
[Prev in Thread] | Current Thread | [Next in Thread] |