1 @c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
2 @c This file is part of lilypond-learning.tely
4 Translation of GIT committish: 45945bd973aa9161b10e3f517902afb7ef4b4a56
6 When revising a translation, copy the HEAD committish of the
7 version that you are working on. See TRANSLATION for details.
14 @appendix Scheme tutorial
19 @cindex Scheme, código en línea
20 @cindex acceder a Scheme
21 @cindex evaluar Scheme
24 LilyPond utiliza el lenguaje de programación Scheme, tanto como parte
25 de la sintaxis del código de entrada, como para servir de mecanismo
26 interno que une los módulos del programa entre sí. Esta sección es
27 una panorámica muy breve sobre cómo introducir datos en Scheme. Si
28 quiere saber más sobre Scheme, consulte
29 @uref{http://@/www@/.schemers@/.org}.
31 LilyPond utiliza la implementación GNU Guile de Scheme, que está
32 basada en el estándar @qq{R5RS} del lenguaje. Si está aprendiendo
33 Scheme para usarlo con LilyPond, no se recomienda trabajar con una
34 implementación distinta (o que se refiera a un estándar diferente).
35 Hay información sobre Guile en
36 @uref{http://www.gnu.org/software/guile/}. El estándar de Scheme
37 @qq{R5RS} se encuentra en
38 @uref{http://www.schemers.org/Documents/Standards/R5RS/}.
40 La instalación de LilyPond inclute también la de la implementación
41 Guile de Scheme. Sobre casi todos los sistemas puede experimentar en
42 una @qq{caja de arena} de Scheme abriendo una ventana del terminal y
43 tecleando @q{guile}. En algunos sistemas, sobre todo en Windows,
44 podría necesitar ajustar la variable de entorno @code{GUILE_LOAD_PATH}
45 a la carpeta @code{../usr/shr/guile/1.8} dentro de la instalación de
46 LilyPond (para conocer la ruta completa a esta carpeta, consulte
47 @ref{Other sources of information}). Como alternativa, los usuarios
48 de Windows pueden seleccionar simplemente @q{Ejecutar} del menú Inicio
49 e introducir @q{guile}.
51 El concepto más básico de un lenguaje son sus tipos de datos: números,
52 cadenas de caracteres, listas, etc. He aquí una lista de los tipos de
53 datos que son de relevancia respecto de la entrada de LilyPond.
57 Los valores Booleanos son Verdadero y Falso. Verdadero en Scheme es @code{#t}
63 Los números se escriben de la forma normal, @code{1} es el número
64 (entero) uno, mientras que @code{-1.5} es un número en coma flotante
65 (un número no entero).
68 Las cadenas se encierran entre comillas:
74 Las cadenas pueden abarcar varias líneas:
82 También se pueden añadir comillas y saltos de línea con las llamadas
83 secuencias de escape. La cadena @code{a dijo "b"} se escribe como
89 Los saltos de línea t las barras invertidas se escapan mediante
90 @code{\n} y @code{\\} respectivamente.
94 En un archivo de música, los fragmentos de código de Scheme se
95 escriben con el signo de almohadilla @code{#}. Así, los ejemplos
96 anteriores traducidos a LilyPond son:
101 #"esto es una cadena"
107 Observe que los comentarios de LilyPond (@code{%} y @code{%@{ %@}}) no
108 se puedden utilizar dentro del código de Scheme. Los comentarios en
109 el Scheme de Guile se introducen como sigue:
112 ; esto es un comentario de una línea
115 Esto es un comentario de bloque (no anidable) estilo Guile
116 Pero se usan rara vez por parte de los Schemers y nunca dentro del
117 código fuente de LilyPond
121 Se pueden combinar en un mismo archivo de música varias expresiones de
122 Scheme consecutivas mediante la utilización del operador @code{begin}.
123 Ello permite que el número de marcas de cuadradillo se redizca a una.
128 (define menganito 1))
131 Si el @code{#} va seguido de un paréntesis de apertura, @code{(}, como
132 en el ejemplo anterior, el analizador sintáctico permanece dentro del
133 modo de Scheme hasta que encuentra el paréntesis de cierre
134 correspondiente, @code{)}, por lo que no son necesarios más símbolos
135 de @code{#} para introducir una sección de Scheme.
137 Durante el resto de esta sección, supondremos que los datos se
138 introducen en un archivo de música, por lo que añadiremos almohadillas
139 @code{#} en todas partes.
141 Scheme se puede usar para hacer cálculos. Utiliza sintaxis
142 @emph{prefija}. Sumar 1 y@tie{}2 se escribe como @code{(+ 1 2)} y no
143 como el tradicional @math{1+2}.
150 La flecha @result{} muestra que el resultado de evaluar @code{(+ 1 2)}
151 es@tie{}@code{3}. Los cálculos se pueden anidar; el resultado de una
152 función se puede usar para otro cálculo.
160 Estos cálculos son ejemplos de evaluaciones; una expresión como
161 @code{(* 3 4)} se sustituye por su valor @code{12}. Algo similar
162 ocurre con las variables. Después de haber definido una variable
169 las variables se pueden usar también dentro de las expresiones, aquí
172 veintiCuatro = #(* 2 doce)
176 el número 24 se almacena dentro de la variable @code{veintiCuatro}.
177 La misma asignación se puede hacer también completamente en Scheme,
180 #(define veintiCuatro (* 2 doce))
183 El @emph{nombre} de una variable también es una expresión, similar a
184 un número o una cadena. Se introduce como
191 @cindex comillas en Scheme
193 El apóstrofo @code{'} evita que el intérprete de Scheme sustituya
194 @code{veintiCuatro} por @code{24}. En vez de esto, obtenemos el
195 nombre @code{veintiCuatro}.
197 Esta sintaxis se usará con mucha frecuencia, pues muchos de los trucos
198 de presentación consisten en asignar valores (de Scheme) a variables
199 internas, por ejemplo
202 \override Stem #'thickness = #2.6
205 Esta instrucción ajusta el aspecto de las plicas. El valor @code{2.6}
206 se pone dentro de la variable @code{thickness} de un objeto
207 @code{Stem}. @code{thickness} se mide a partir del grosor de las
208 líneas del pentagrama, y así estas plicas serán @code{2.6} veces el
209 grosor de las líneas del pentagrama. Esto hace que las plicas sean
210 casi el doble de gruesas de lo normal. Para distinguir entre las
211 variables que se definen en los archivos de entrada (como
212 @code{veintiCuatro} en el ejemplo anterior) y las variables de los
213 objetos internos, llamaremos a las últimas @q{propiedades} y a las
214 primeras @q{variables.} Así, el objeto plica tiene una propiedad
215 @code{thickness} (grosor), mientras que @code{veintiCuatro} es una
218 @cindex propiedades frente a variables
219 @cindex variables frente a propiedades
221 Los desplazamientos bidimensionales (coordenadas X e Y) así como los
222 tamaños de los objetos (intervalos con un punto izquierdo y otro
223 derecho) se introducen como @code{parejas}. Una pareja@footnote{En la
224 terminología de Scheme, la pareja se llama @code{cons}, y sus dos
225 elementos se llaman @code{car} y @code{cdr} respectivamente.} se
226 introduce como @code{(primero . segundo)} y, como los símbolos, se deben
227 preceder de un apóstrofo:
230 \override TextScript #'extra-offset = #'(1 . 2)
233 Esto asigna la pareja (1, 2) a la propiedad @code{extra-offset} del
234 objeto TextScript. Estos números se miden en espacios de pentagrama,
235 y así esta instrucción mueve el objeto un espacio de pentagrama a la
236 derecha, y dos espacios hacia arriba.
238 Los dos elementos de una pareja pueden ser valores arbitrarios, por
244 #'("bla-bla" . 3.14159265)
247 Una lista se escribe encerrando sus elementos entre paréntesis, y
248 añadiendo un apóstrofo. Por ejemplo,
255 Todo el tiempo hemos estado usando listas. Un cálculo, como @code{(+
256 1 2)} también es una lista (que contiene el símbolo @code{+} y los
257 números 1 y@tie{}2). Normalmente, las listas se interpretan como
258 cálculos, y el intérprete de Scheme sustituye el resultado del
259 cálculo. Para escribir una lista, detenemos la evaluación. Esto se
260 hace precediendo la lista por un apóstrofo @code{'}. Así, para los
261 cálculos no usamos ningún apóstrofo.
263 Dentro de una lista o pareja precedida de apóstrofo, no hay necesidad
264 de escribir ningún apóstrofo más. Lo siguiente es una pareja de
265 símbolos, una lista de símbolos y una lista de listas respectivamente:
269 #'(staff clef key-signature)
275 * Tweaking with Scheme::
278 @node Tweaking with Scheme
279 @appendixsec Tweaking with Scheme
281 Hemos visto cómo la salida de LilyPond se puede modificar
282 profundamente usando instrucciones como @code{\override TextScript
283 #'extra-offset = ( 1 . -1)}. Pero tenemos incluso mucho más poder si
284 utilizamos Scheme. Para ver una explicación completa de esto,
285 consulte el @ref{Scheme tutorial}, y @ruser{Interfaces for
288 Podemos usar Scheme simplemente para sobreescribir instrucciones con
291 @c This isn't a valid example with skylining
292 @c It works fine without padText -td
295 @lilypond[quote,verbatim,ragged-right]
296 padText = #(define-music-function (parser location padding) (number?)
298 \once \override TextScript #'padding = #$padding
306 c4^"piu mosso" fis a g
311 Lo podemos usar para crear instrucciones nuevas:
313 @c Check this is a valid example with skylining
314 @c It is - 'padding still works
316 @lilypond[quote,verbatim,ragged-right]
317 tempoPadded = #(define-music-function (parser location padding tempotext)
320 \once \override Score.MetronomeMark #'padding = $padding
321 \tempo \markup { \bold $tempotext }
325 \tempo \markup { "Low tempo" }
327 \tempoPadded #4.0 #"High tempo"
332 Incluso se le pueden pasar expresiones musicales:
334 @lilypond[quote,verbatim,ragged-right]
335 pattern = #(define-music-function (parser location x y) (ly:music? ly:music?)
342 \pattern {d16 dis} { ais16-> b\p }