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