1 @c -*- coding: utf-8; mode: texinfo; -*-
2 @c This file is part of lilypond.tely
4 Translation of GIT committish: 79583ed701a443510826b8f22f20fd6e7d5eccbe
6 When revising a translation, copy the HEAD committish of the
7 version that you are working on. See TRANSLATION for details.
13 @appendix Scheme tutorial
18 @cindex Scheme, in-line code
19 @c @cindex accessing Scheme
20 @c @cindex evaluating Scheme
23 LilyPond verwendet die Scheme-Programmiersprache sowohl als Teil
24 der Eingabesyntax als auch als internen Mechanismus, um Programmmodule
25 zusammenzufügen. Dieser Abschnitt ist ein sehr kurzer Überblick über
26 die Dateneingabe mit Scheme. Wenn Sie mehr über Scheme wissen wollen,
27 gehen Sie zu @uref{http://@/www@/.schemers@/.org}.
29 Das Grundlegendste an einer Sprache sind Daten: Zahlen, Zeichen,
30 Zeichenketten, Listen usw. Hier ist eine Liste der Datentypen, die für
31 LilyPond-Eingabedateien relevant sind.
34 @item Boolesche Variablen
35 Werte einer Booleschen Variable sind Wahr oder Falsch. Die Scheme-Entsprechung
36 für Wahr ist @code{#t} und für Falsch @code{#f}.
41 Zahlen werden wie üblich eingegeben, @code{1} ist die (ganze)
42 Zahl Eins, während @code{-1.5} ist eine Gleitkommazahl (also
46 Zeichenketten werden in doppelte Anführungszeichen gesetzt:
49 "Das ist eine Zeichenkette"
52 Zeichenketten können über mehrere Zeilen reichen:
60 Anführungszeichen und neue Zeilen können auch mit sogenannten
61 Fluchtsequenzen eingefügt werden. Die Zeichenkette
62 @code{a sagt "b"} wird wie folgt eingegeben:
68 Neue Zeilen und Backslashe werden mit @code{\n} bzw. @code{\\}
72 In einer Notationsdatei werden kleine Scheme-Abschnitte mit der
73 Raute (@code{#}) eingeleitet. Die vorigen Beispiele heißen also in
79 #"Das ist eine Zeichenkette"
85 Für den Rest dieses Abschnitts nehmen wir an, dass die Daten immer in
86 einer LilyPond-Datei stehen, darum wird immer die Raute verwendet.
88 Scheme kann verwendet werden, um Berechnungen durchzuführen. Es
89 verwendet eine @emph{Präfix}-Syntax. Um 1 und@tie{}2 zu addieren, muss
90 man @code{(+ 1 2)} schreiben, und nicht @math{1+2}, wie in traditioneller
98 Der Pfeil @result{} zeigt an, dass das Ergebnis der Auswertung von
99 @code{(+ 1 2)} @code{3}@tie{}ist. Berechnungen können geschachtelt
100 werden und das Ergebnis einer Berechnung kann für eine neue
101 Berechnung eingesetzt werden.
109 Diese Berechnungen sind Beispiele von Auswertungen. Ein Ausdruck
110 wie @code{(* 3 4)} wird durch seinen Wert @code{12} ersetzt. Ähnlich
111 verhält es sich mit Variablen. Nachdem eine Variable definiert ist:
118 kann man sie in Ausdrücken weiterverwenden:
121 twentyFour = #(* 2 twelve)
125 Die 24 wird in der Variablen @code{twentyFour} gespeichert.
126 Die gleiche Zuweisung kann auch vollständig in Scheme geschrieben
130 #(define twentyFour (* 2 twelve))
133 Der @emph{Name} einer Variable ist auch ein Ausdruck, genauso wie
134 eine Zahl oder eine Zeichenkette. Er wird wie folgt eingegeben:
141 @cindex Zitieren in Scheme
143 Das Apostroph @code{'} verhindert, dass bei der Scheme-Auswertung
144 @code{twentyFour} durch @code{24} ersetzt wird. Anstatt dessen erhalten
145 wir die Bezeichnung @code{twentyFour}.
147 Diese Syntax wird sehr oft verwendet, weil es manche
148 Einstellungsveränderungen erfordern, dass Scheme-Werte einer
149 internen Variable zugewiesen werden, wie etwa
152 \override Stem #'thickness = #2.6
155 Diese Anweisung verändert die Erscheinung der Notenhälse. Der Wert
156 @code{2.6} wird der Variable @code{thickness} (Dicke) eines
157 @code{Stem}-(Hals)-Objektes gleichgesetzt.
158 @code{thickness} wird relativ zu den Notenlinien errechnet, in diesem
159 Fall sind die Hälse also 2,6 mal so dick wie die Notenlinien. Dadurch
160 werden Hälse fast zweimal so dick dargestellt, wie sie normalerweise sind.
161 Um zwischen Variablen zu unterscheiden, die in den Quelldateien direkt
162 definiert werden (wie @code{twentyFour} weiter oben), und zwischen denen,
163 die für interne Objekte zuständig sind, werden hier die ersteren
164 @qq{Bezeichner} genannt, die letzteren dagegen @qq{Eigenschaften}.
165 Das Hals-Objekt hat also eine @code{thickness}-Eigenschaft, während
166 @code{twentyFour} ein Bezeichner ist.
168 @cindex Eigenschaften versus Bezeichner
169 @cindex Bezeichner versus Eigenschaften
171 Sowohl zweidimensionale Abstände (X- und Y-Koordinaten) als auch
172 Größen von Objekten (Intervalle mit linker und rechter Begrenzung) werden
173 als @code{pairs} (Paare) eingegeben. Ein Paar@footnote{In der
174 Scheme-Terminologie wird ein Paar @code{cons} genannt und seine
175 zwei Elemente @code{car} und @code{cdr}.} wird als @code{(erster . zweiter)}
176 eingegeben und sie müssen mit dem Apostroph eingeleitet werden, genauso
180 \override TextScript #'extra-offset = #'(1 . 2)
183 Hierdurch wird das Paar (1, 2) mit der Eigenschaft @code{extra-offset}
184 des TextScript-Objektes verknüpft. Diese Zahlen werden in
185 Systembreiten gemessen, so dass der Befehl das Objekt eine Systembreite
186 nach rechts verschiebt und zwei Breiten nach oben.
188 Die zwei Elemente eines Paares können von beliebigem Inhalt sein, etwa
193 #'("blah-blah" . 3.14159265)
196 Eine Liste wird eingegeben, indem die Elemente der Liste in Klammern
197 geschrieben werden, mit einem Apostroph davor. Beispielsweise:
204 Die ganze Zeit wurde hier schon Listen benutzt. Eine Berechnung,
205 wie @code{(+ 1 2)}, ist auch eine Liste (welche das Symbol @code{+}
206 und die Nummern 1 und@tie{}2 enthält. Normalerweise werden Listen
207 als Berechnungen interpretiert und der Scheme-Interpreter ersetzt
208 die Liste mit dem Ergebnis der Berechnung. Um eine Liste an sich
209 einzugeben, muss die Auswertung angehalten werden. Das geschieht,
210 indem der Liste ein Apostroph vorangestellt wird. Für Berechnungen
211 kann man also den Apostroph nicht verwenden.
213 Innerhalb einer zitierten Liste (also mit Apostroph) muss man keine
214 Anführungszeichen mehr setzen. Im Folgenden ein Symbolpaar, eine
215 Symbolliste und eine Liste von Listen:
219 #'(staff clef key-signature)