1 @c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
2 @c This file is part of lilypond-learning.tely
4 Translation of GIT committish: 03184badb3c2378e1ab3eec6ee62a6bdc0609082
6 When revising a translation, copy the HEAD committish of the
7 version that you are working on. See TRANSLATION for details.
12 @appendix Scheme tutorial
17 @cindex Scheme, código en línea
18 @cindex acceder a Scheme
19 @cindex evaluar Scheme
22 LilyPond utiliza el lenguaje de programación Scheme, tanto como parte
23 de la sintaxis del código de entrada, como para servir de mecanismo
24 interno que une los módulos del programa entre sí. Esta sección es
25 una panorámica muy breve sobre cómo introducir datos en Scheme. Si
26 quiere saber más sobre Scheme, consulte
27 @uref{http://@/www@/.schemers@/.org}.
29 Lo más básico de un lenguaje son los datos: números, cadenas de
30 caracteres, listas, etc. He aquí una lista de los tipos de datos que
31 son de relevancia respecto de la entrada de LilyPond.
35 Los valores Booleanos son Verdadero y Falso. Verdadero en Scheme es @code{#t}
41 Los números se escriben de la forma normal, @code{1} es el número
42 (entero) uno, mientras que @code{-1.5} es un número en coma flotante
43 (un número no entero).
46 Las cadenas se encierran entre comillas:
52 Las cadenas pueden abarcar varias líneas:
60 También se pueden añadir comillas y saltos de línea con las llamadas
61 secuencias de escape. La cadena @code{a dijo "b"} se escribe como
67 Los saltos de línea t las barras invertidas se escapan mediante
68 @code{\n} y @code{\\} respectivamente.
72 En un archivo de música, los fragmentos de código de Scheme se
73 escriben con el signo de almohadilla @code{#}. Así, los ejemplos
74 anteriores traducidos a LilyPond son:
85 Durante el resto de esta sección, supondremos que los datos se
86 introducen en un archivo de música, por lo que añadiremos almohadillas
87 @code{#} en todas partes.
89 Scheme se puede usar para hacer cálculos. Utiliza sintaxis
90 @emph{prefija}. Sumar 1 y@tie{}2 se escribe como @code{(+ 1 2)} y no
91 como el tradicional @math{1+2}.
98 La flecha @result{} muestra que el resultado de evaluar @code{(+ 1 2)}
99 es@tie{}@code{3}. Los cálculos se pueden anidar; el resultado de una
100 función se puede usar para otro cálculo.
108 Estos cálculos son ejemplos de evaluaciones; una expresión como
109 @code{(* 3 4)} se sustituye por su valor @code{12}. Algo similar
110 ocurre con las variables. Después de haber definido una variable
117 las variables se pueden usar también dentro de las expresiones, aquí
120 veintiCuatro = #(* 2 doce)
124 el número 24 se almacena dentro de la variable @code{veintiCuatro}.
125 La misma asignación se puede hacer también completamente en Scheme,
128 #(define veintiCuatro (* 2 doce))
131 El @emph{nombre} de una variable también es una expresión, similar a
132 un número o una cadena. Se introduce como
139 @cindex comillas en Scheme
141 El apóstrofe @code{'} evita que el intérprete de Scheme sustituya
142 @code{veintiCuatro} por @code{24}. En vez de esto, obtenemos el
143 nombre @code{veintiCuatro}.
145 Esta sintaxis se usará con mucha frecuencia, pues muchos de los trucos
146 de presentación consisten en asignar valores (de Scheme) a variables
147 internas, por ejemplo
150 \override Stem #'thickness = #2.6
153 Esta instrucción ajusta el aspecto de las plicas. El valor @code{2.6}
154 se pone dentro de la variable @code{thickness} de un objeto
155 @code{Stem}. @code{thickness} se mide a partir del grosor de las
156 líneas del pentagrama, y así estas plicas serán @code{2.6} veces el
157 grosor de las líneas del pentagrama. Esto hace que las plicas sean
158 casi el doble de gruesas de lo normal. Para distinguir entre las
159 variables que se definen en los archivos de entrada (como
160 @code{veintiCuatro} en el ejemplo anterior) y las variables de los
161 objetos internos, llamaremos a las últimas @q{propiedades} y a las
162 primeras @q{variables.} Así, el objeto plica tiene una propiedad
163 @code{thickness} (grosor), mientras que @code{veintiCuatro} es una
166 @cindex propiedades frente a variables
167 @cindex variables frente a propiedades
169 Los desplazamientos bidimensionales (coordenadas X e Y) así como los
170 tamaños de los objetos (intervalos con un punto izquierdo y otro
171 derecho) se introducen como @code{parejas}. Una pareja@footnote{En la
172 terminología de Scheme, la pareja se llama @code{cons}, y sus dos
173 elementos se llaman @code{car} y @code{cdr} respectivamente.} se
174 introduce como @code{(primero . segundo)} y, como los símbolos, se deben
175 preceder de un apóstrofe:
178 \override TextScript #'extra-offset = #'(1 . 2)
181 Esto asigna la pareja (1, 2) a la propiedad @code{extra-offset} del
182 objeto TextScript. Estos números se miden en espacios de pentagrama,
183 y así esta instrucción mueve el objeto un espacio de pentagrama a la
184 derecha, y dos espacios hacia arriba.
186 Los dos elementos de una pareja pueden ser valores arbitrarios, por
192 #'("bla-bla" . 3.14159265)
195 Una lista se escribe encerrando sus elementos entre paréntesis, y
196 añadiendo un apóstrofe. Por ejemplo,
203 Todo el tiempo hemos estado usando listas. Un cálculo, como @code{(+
204 1 2)} también es una lista (que contiene el símbolo @code{+} y los
205 números 1 y@tie{}2). Normalmente, las listas se interpretan como
206 cálculos, y el intérprete de Scheme sustituye el resultado del
207 cálculo. Para escribir una lista, detenemos la evaluación. Esto se
208 hace precediendo la lista por un apóstrofe @code{'}. Así, para los
209 cálculos no usamos ningún apóstrofe.
211 Dentro de una lista o pareja precedida de apóstrofe, no hay necesidad
212 de escribir ningún apóstrofe más. Lo siguiente es una pareja de
213 símbolos, una lista de símbolos y una lista de listas respectivamente:
217 #'(staff clef key-signature)
223 * Tweaking with Scheme::
226 @node Tweaking with Scheme
227 @appendixsec Tweaking with Scheme
229 Hemos visto cómo la salida de LilyPond se puede modificar
230 profundamente usando instrucciones como @code{\override TextScript
231 #'extra-offset = ( 1 . -1)}. Pero tenemos incluso mucho más poder si
232 utilizamos Scheme. Para ver una explicación completa de esto,
233 consulte el @ref{Scheme tutorial}, y @ruser{Interfaces for
236 Podemos usar Scheme simplemente para sobreescribir instrucciones con
239 @c This isn't a valid example with skylining
240 @c It works fine without padText -td
243 @lilypond[quote,verbatim,ragged-right]
244 padText = #(define-music-function (parser location padding) (number?)
246 \once \override TextScript #'padding = #$padding
254 c4^"piu mosso" fis a g
259 Lo podemos usar para crear instrucciones nuevas:
261 @c Check this is a valid example with skylining
262 @c It is - 'padding still works
264 @lilypond[quote,verbatim,ragged-right]
265 tempoMark = #(define-music-function (parser location padding marktext)
268 \once \override Score . RehearsalMark #'padding = $padding
269 \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0)
270 \mark \markup { \bold $marktext }
275 \tempoMark #3.0 #"Allegro"
280 Incluso se le pueden pasar expresiones musicales:
282 @lilypond[quote,verbatim,ragged-right]
283 pattern = #(define-music-function (parser location x y) (ly:music? ly:music?)
290 \pattern {d16 dis} { ais16-> b\p }