]> git.donarmstrong.com Git - lilypond.git/blob - Documentation/de/learning/scheme-tutorial.itely
8951a43acf91ebb0f55178843f5f46e1c49325b9
[lilypond.git] / Documentation / de / learning / scheme-tutorial.itely
1 @c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*-
2
3 @ignore
4     Translation of GIT committish: 5131c3292d30cabdf08839daa02a006e4d3c96c5
5
6     When revising a translation, copy the HEAD committish of the
7     version that you are working on.  See TRANSLATION for details.
8 @end ignore
9
10 @c \version "2.12.0"
11
12 @node Scheme-Übung
13 @appendix Scheme-Übung
14 @translationof Scheme tutorial
15
16 @funindex #
17 @cindex Scheme
18 @cindex GUILE
19 @cindex Scheme, in einer LilyPond-Datei
20 @cindex LISP
21
22 LilyPond verwendet die Scheme-Programmiersprache sowohl als Teil 
23 der Eingabesyntax als auch als internen Mechanismus, um Programmmodule 
24 zusammenzufügen.  Dieser Abschnitt ist ein sehr kurzer Überblick über 
25 die Dateneingabe mit Scheme.  Wenn Sie mehr über Scheme wissen wollen,
26 gehen Sie zu @uref{http://@/www@/.schemers@/.org}.
27
28 Das Grundlegendste an einer Sprache sind Daten: Zahlen, Zeichen, 
29 Zeichenketten, Listen usw.  Hier ist eine Liste der Datentypen, die für 
30 LilyPond-Eingabedateien relevant sind.
31
32 @table @asis
33 @item Boolesche Variablen
34 Werte einer Booleschen Variable sind Wahr oder Falsch. Die Scheme-Entsprechung
35 für Wahr ist @code{#t} und für Falsch @code{#f}.
36 @funindex ##t
37 @funindex ##f
38
39 @item Zahlen
40 Zahlen werden wie üblich eingegeben, @code{1} ist die (ganze) 
41 Zahl Eins, während @code{-1.5} ist eine Gleitkommazahl (also 
42 eine nicht-ganze).
43
44 @item Zeichenketten
45 Zeichenketten werden in doppelte Anführungszeichen gesetzt:
46
47 @example
48 "Das ist eine Zeichenkette"
49 @end example
50
51 Zeichenketten können über mehrere Zeilen reichen:
52
53 @example
54 "Das
55 ist
56 eine Zeichenkette"
57 @end example
58
59 Anführungszeichen und neue Zeilen können auch mit sogenannten 
60 Fluchtsequenzen eingefügt werden. Die Zeichenkette
61 @code{a sagt "b"} wird wie folgt eingegeben:
62
63 @example
64 "a sagt \"b\""
65 @end example
66
67 Neue Zeilen und Backslashe werden mit @code{\n} bzw. @code{\\}
68 eingegeben.
69 @end table
70
71 In einer Notationsdatei werden kleine Scheme-Abschnitte mit der 
72 Raute (@code{#}) eingeleitet. Die vorigen Beispiele heißen also in 
73 LilyPond:
74
75 @example
76 ##t ##f
77 #1 #-1.5
78 #"Das ist eine Zeichenkette"
79 #"Das
80 ist
81 eine Zeichenkette"
82 @end example
83
84 Für den Rest dieses Abschnitts nehmen wir an, dass die Daten immer in 
85 einer LilyPond-Datei stehen, darum wird immer die Raute verwendet.
86
87 Scheme kann verwendet werden, um Berechnungen durchzuführen. Es 
88 verwendet eine @emph{Präfix}-Syntax. Um 1 und@tie{}2 zu addieren, muss 
89 man @code{(+ 1 2)} schreiben, und nicht @math{1+2}, wie in traditioneller
90 Mathematik.
91
92 @lisp
93 #(+ 1 2)
94   @result{} #3
95 @end lisp
96
97 Der Pfeil @result{} zeigt an, dass das Ergebnis der Auswertung von 
98 @code{(+ 1 2)} @code{3}@tie{}ist. Berechnungen können geschachtelt 
99 werden und das Ergebnis einer Berechnung kann für eine neue 
100 Berechnung eingesetzt werden.
101
102 @lisp
103 #(+ 1 (* 3 4))
104   @result{} #(+ 1 12)
105   @result{} #13
106 @end lisp
107
108 Diese Berechnungen sind Beispiele von Auswertungen. Ein Ausdruck 
109 wie @code{(* 3 4)} wird durch seinen Wert @code{12} ersetzt. Ähnlich 
110 verhält es sich mit Variablen. Nachdem eine Variable definiert ist:
111
112 @example
113 zwoefl = #12
114 @end example
115
116 @noindent
117 kann man sie in Ausdrücken weiterverwenden:
118
119 @example
120 vierundzwanzig = #(* 2 zwoelf)
121 @end example
122
123 @noindent
124 Die 24 wird in der Variablen @code{vierundzwanzig} gespeichert.
125 Die gleiche Zuweisung kann auch vollständig in Scheme geschrieben 
126 werden:
127
128 @example
129 #(define vierundzwanzig (* 2 zwoelf))
130 @end example
131
132 Der @emph{Name} einer Variable ist auch ein Ausdruck, genauso wie 
133 eine Zahl oder eine Zeichenkette. Er wird wie folgt eingegeben:
134
135 @example
136 #'vierundzwanzig
137 @end example
138
139 @funindex #'symbol
140 @cindex Zitieren in Scheme
141
142 Das Apostroph @code{'} verhindert, dass bei der Scheme-Auswertung
143  @code{vierundzwanzig} durch @code{24} ersetzt wird. Anstatt dessen erhalten 
144  wir die Bezeichnung @code{vierundzwanzig}.
145
146 Diese Syntax wird sehr oft verwendet, weil es manche
147 Einstellungsveränderungen erfordern, dass Scheme-Werte einer 
148 internen Variable zugewiesen werden, wie etwa
149
150 @example
151 \override Stem #'thickness = #2.6
152 @end example
153
154 Diese Anweisung verändert die Erscheinung der Notenhälse. Der Wert 
155 @code{2.6} wird der Variable @code{thickness} (Dicke) eines 
156 @code{Stem}-(Hals)-Objektes gleichgesetzt. 
157 @code{thickness} wird relativ zu den Notenlinien errechnet, in diesem 
158 Fall sind die Hälse also 2,6 mal so dick wie die Notenlinien.  Dadurch 
159 werden Hälse fast zweimal so dick dargestellt, wie sie normalerweise sind. 
160 Um zwischen Variablen zu unterscheiden, die in den Quelldateien direkt 
161 definiert werden (wie @code{vierundzwanzig} weiter oben), und zwischen denen, 
162 die für interne Objekte zuständig sind, werden hier die ersteren 
163 @qq{Bezeichner} genannt, die letzteren dagegen @qq{Eigenschaften}.
164 Das Hals-Objekt hat also eine @code{thickness}-Eigenschaft, während 
165 @code{vierundzwanzig} ein Bezeichner ist.
166
167 @cindex Eigenschaften versus Bezeichner
168 @cindex Bezeichner versus Eigenschaften
169
170 Sowohl zweidimensionale Abstände (X- und Y-Koordinaten) als auch 
171 Größen von Objekten (Intervalle mit linker und rechter Begrenzung) werden 
172 als @code{pairs} (Paare) eingegeben. Ein Paar@footnote{In der 
173 Scheme-Terminologie wird ein Paar @code{cons} genannt und seine 
174 zwei Elemente @code{car} und @code{cdr}.} wird als @code{(erster . zweiter)}
175 eingegeben und sie müssen mit dem Apostroph eingeleitet werden, genauso 
176 wie Symbole:
177
178 @example
179 \override TextScript #'extra-offset = #'(1 . 2)
180 @end example
181
182 Hierdurch wird das Paar (1, 2) mit der Eigenschaft @code{extra-offset}
183 des TextScript-Objektes verknüpft. Diese Zahlen werden in 
184 Systembreiten  gemessen, so dass der Befehl das Objekt eine Systembreite 
185 nach rechts verschiebt und zwei Breiten nach oben.
186
187 Die zwei Elemente eines Paares können von beliebigem Inhalt sein, etwa
188
189 @example
190 #'(1 . 2)
191 #'(#t . #f)
192 #'("blah-blah" . 3.14159265)
193 @end example
194
195 Eine Liste wird eingegeben, indem die Elemente der Liste in Klammern 
196 geschrieben werden, mit einem Apostroph davor. Beispielsweise:
197
198 @example
199 #'(1 2 3)
200 #'(1 2 "string" #f)
201 @end example
202
203 Die ganze Zeit wurde hier schon Listen benutzt. Eine Berechnung, 
204 wie @code{(+ 1 2)}, ist auch eine Liste (welche das Symbol @code{+} 
205 und die Nummern 1 und@tie{}2 enthält. Normalerweise werden Listen 
206 als Berechnungen interpretiert und der Scheme-Interpreter ersetzt 
207 die Liste mit dem Ergebnis der Berechnung. Um eine Liste an sich 
208 einzugeben, muss die Auswertung angehalten werden. Das geschieht, 
209 indem der Liste ein Apostroph vorangestellt wird. Für Berechnungen 
210 kann man also den Apostroph nicht verwenden.
211
212 Innerhalb einer zitierten Liste (also mit Apostroph) muss man keine 
213 Anführungszeichen mehr setzen. Im Folgenden ein Symbolpaar, eine 
214 Symbolliste und eine Liste von Listen:
215
216 @example
217 #'(stem . head)
218 #'(staff clef key-signature)
219 #'((1) (2))
220 @end example
221
222
223
224 @menu
225 * Optimierungen mit Scheme::
226 @end menu
227
228 @node Optimierungen mit Scheme
229 @appendixsec Optimierungen mit Scheme
230 @translationof Tweaking with Scheme
231
232 Wir haben gesehen wie LilyPond-Eingabe massiv beeinflusst
233 werden kann, indem Befehle wie etwa
234 @code{\override TextScript #'extra-offset = ( 1 . -1)}
235 benutzt werden.  Aber es wurde gezeigt, dass Scheme noch
236 mächtiger ist.  Eine bessere Erklärung findet sich in der@ref{Scheme-Übung} und in
237 @ruser{Schnittstellen für Programmierer}.
238
239 Scheme kann auch in einfachen @code{\override}-Befehlen
240 benutzt werden:
241
242 TODO Find a simple example
243 @c This isn't a valid example with skylining
244 @c It works fine without padText  -td
245
246 @ignore
247 @lilypond[quote,verbatim,ragged-right]
248 padText = #(define-music-function (parser location padding) (number?)
249 #{
250   \once \override TextScript #'padding = #$padding
251 #})
252
253 \relative c''' {
254   c4^"piu mosso" b a b
255   \padText #1.8
256   c4^"piu mosso" d e f
257   \padText #2.6
258   c4^"piu mosso" fis a g
259 }
260 @end lilypond
261 @end ignore
262
263 Es kann auch benutzt werden, um Befehle zu erstellen:
264
265 @c Check this is a valid example with skylining
266 @c It is - 'padding still works
267
268 @lilypond[quote,verbatim,ragged-right]
269 tempoPadded = #(define-music-function (parser location padding tempotext)
270   (number? string?)
271 #{
272   \once \override Score.MetronomeMark #'padding = $padding
273   \tempo \markup { \bold $tempotext }
274 #})
275
276 \relative c'' {
277   \tempo \markup { "Low tempo" }
278   c4 d e f g1
279   \tempoPadded #4.0 #"High tempo"
280   g4 f e d c1
281 }
282 @end lilypond
283
284 Sogar ganze Musikausdrücke können eingefügt werden:
285
286 @lilypond[quote,verbatim,ragged-right]
287 pattern = #(define-music-function (parser location x y) (ly:music? ly:music?)
288 #{
289   $x e8 a b $y b a e
290 #})
291
292 \relative c''{
293   \pattern c8 c8\f
294   \pattern {d16 dis} { ais16-> b\p }
295 }
296 @end lilypond
297
298