[ << Scheme-Tutorium ] | [Top][Contents][Index] | [ Schnittstellen für Programmierer >> ] |
[ < LilyPond-Variablen ] | [ Up : Scheme in LilyPond ] | [ Scheme in LilyPond importieren > ] |
1.2.3 Eingabe-Variablen und Scheme
Das Eingabeformat unterstützt die Notation von Variablen: Im folgenden
Beispiel wird ein musikalischer Ausdruck einer Variablen mit der
Bezeichnung traLaLa
zugewiesen:
traLaLa = { c'4 d'4 }
Variablen haben beschränkte Geltungsbereiche: im unten stehenden Beispiel
enthält auch die \layout
-Umgebung eine traLaLa
-Variable,
die sich aber von der traLaLa
-Variable auf oberster Ebene unterscheidet:
traLaLa = { c'4 d'4 } \layout { traLaLa = 1.0 }
Jede Eingabedatei ist solch ein Gültigkeitsbereich, und alle
\header
-, \midi
- und \layout
-Umgebungen
sind Gültigkeitsbereiche, die in diesen obersten Gültigkeitsbereich
eingebettet sind.
Sowohl Variablen als auch Gültigkeitsbereiche sind im Guile Modulsystem eingebaut. Ein anonymes Scheme-Modul wird jedem Gültigkeitsbereich angehängt. Eine Zuweisen in der Form von
traLaLa = { c'4 d'4 }
wird intern in die Scheme-Definition
(define traLaLa Scheme-Wert von `... ')
konvertiert.
Das bedeutet, dass LilyPond-Variablen und Scheme-Variablen frei gemischt
werden können. Im folgenden Beispiel wird ein Notenfragment in der
Variable traLaLa
gespeichert und mit Scheme dupliziert. Das
Resultat wird in eine \score
-Umgebung mit einer weiteren
Variable twice
importiert:
traLaLa = { c'4 d'4 } #(define newLa (map ly:music-deep-copy (list traLaLa traLaLa))) #(define twice (make-sequential-music newLa)) \twice
Das ist ein interessantes Beispiel. Die Zuweisung findet erst statt,
nachdem der Parser sichergestellt hat, dass nichts folgt, das Ähnlichkeit
mit \addlyrics
hat, sodass er prüfen muss, was als nächstes kommt.
Er liest #
und den darauf folgenden Scheme-Ausdruck, ohne ihn
auszuwerten, so dass er weiterlesen und erst danach
wird der Scheme-Code ohne Probleme ausführen kann.
[ << Scheme-Tutorium ] | [Top][Contents][Index] | [ Schnittstellen für Programmierer >> ] |
[ < LilyPond-Variablen ] | [ Up : Scheme in LilyPond ] | [ Scheme in LilyPond importieren > ] |