]> git.donarmstrong.com Git - lilypond.git/blob - Documentation/es/user/scheme-tutorial.itely
b08ece054fbebd08ae0463491161d75d13f591f2
[lilypond.git] / Documentation / es / user / scheme-tutorial.itely
1 @c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
2 @c This file is part of lilypond-learning.tely
3 @ignore
4     Translation of GIT committish: 45945bd973aa9161b10e3f517902afb7ef4b4a56
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
13 @node Scheme tutorial
14 @appendix Scheme tutorial
15
16 @funindex #
17 @cindex Scheme
18 @cindex GUILE
19 @cindex Scheme, código en línea
20 @cindex acceder a Scheme
21 @cindex evaluar Scheme
22 @cindex LISP
23
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}.
30
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/}.
39
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}.
50
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.
54
55 @table @asis
56 @item Booleanos
57 Los valores Booleanos son Verdadero y Falso.  Verdadero en Scheme es @code{#t}
58 y Falso es @code{#f}.
59 @funindex ##t
60 @funindex ##f
61
62 @item Números
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).
66
67 @item Cadenas
68 Las cadenas se encierran entre comillas:
69
70 @example
71 "esto es una cadena"
72 @end example
73
74 Las cadenas pueden abarcar varias líneas:
75
76 @example
77 "esto
78 es
79 una cadena"
80 @end example
81
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
84
85 @example
86 "a dijo \"b\""
87 @end example
88
89 Los saltos de línea t las barras invertidas se escapan mediante
90 @code{\n} y @code{\\} respectivamente.
91 @end table
92
93
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:
97
98 @example
99 ##t ##f
100 #1 #-1.5
101 #"esto es una cadena"
102 #"esto
103 es
104 una cadena"
105 @end example
106
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:
110
111 @example
112 ; esto es un comentario de una línea
113
114 #!
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
118 !#
119 @end example
120
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.
124
125 @example
126 #(begin
127   (define fulanito 0)
128   (define menganito 1))
129 @end example
130
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.
136
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.
140
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}.
144
145 @lisp
146 #(+ 1 2)
147   @result{} #3
148 @end lisp
149
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.
153
154 @lisp
155 #(+ 1 (* 3 4))
156   @result{} #(+ 1 12)
157   @result{} #13
158 @end lisp
159
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
163
164 @example
165 doce = #12
166 @end example
167
168 @noindent
169 las variables se pueden usar también dentro de las expresiones, aquí
170
171 @example
172 veintiCuatro = #(* 2 doce)
173 @end example
174
175 @noindent
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,
178
179 @example
180 #(define veintiCuatro (* 2 doce))
181 @end example
182
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
185
186 @example
187 #'veintiCuatro
188 @end example
189
190 @funindex #'symbol
191 @cindex comillas en Scheme
192
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}.
196
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
200
201 @example
202 \override Stem #'thickness = #2.6
203 @end example
204
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
216 variable.
217
218 @cindex propiedades frente a variables
219 @cindex variables frente a propiedades
220
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:
228
229 @example
230 \override TextScript #'extra-offset = #'(1 . 2)
231 @end example
232
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.
237
238 Los dos elementos de una pareja pueden ser valores arbitrarios, por
239 ejemplo
240
241 @example
242 #'(1 . 2)
243 #'(#t . #f)
244 #'("bla-bla" . 3.14159265)
245 @end example
246
247 Una lista se escribe encerrando sus elementos entre paréntesis, y
248 añadiendo un apóstrofo.  Por ejemplo,
249
250 @example
251 #'(1 2 3)
252 #'(1 2 "cadena" #f)
253 @end example
254
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.
262
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:
266
267 @example
268 #'(stem . head)
269 #'(staff clef key-signature)
270 #'((1) (2))
271 @end example
272
273
274 @menu
275 * Tweaking with Scheme::
276 @end menu
277
278 @node Tweaking with Scheme
279 @appendixsec Tweaking with Scheme
280
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
286 programmers}.
287
288 Podemos usar Scheme simplemente para sobreescribir instrucciones con
289 @code{\override},
290
291 @c This isn't a valid example with skylining
292 @c It works fine without padText  -td
293
294 @ignore
295 @lilypond[quote,verbatim,ragged-right]
296 padText = #(define-music-function (parser location padding) (number?)
297 #{
298   \once \override TextScript #'padding = #$padding
299 #})
300
301 \relative c''' {
302   c4^"piu mosso" b a b
303   \padText #1.8
304   c4^"piu mosso" d e f
305   \padText #2.6
306   c4^"piu mosso" fis a g
307 }
308 @end lilypond
309 @end ignore
310
311 Lo podemos usar para crear instrucciones nuevas:
312
313 @c Check this is a valid example with skylining
314 @c It is - 'padding still works
315
316 @lilypond[quote,verbatim,ragged-right]
317 tempoPadded = #(define-music-function (parser location padding tempotext)
318   (number? string?)
319 #{
320   \once \override Score.MetronomeMark #'padding = $padding
321   \tempo \markup { \bold $tempotext }
322 #})
323
324 \relative c'' {
325   \tempo \markup { "Low tempo" }
326   c4 d e f g1
327   \tempoPadded #4.0 #"High tempo"
328   g4 f e d c1
329 }
330 @end lilypond
331
332 Incluso se le pueden pasar expresiones musicales:
333
334 @lilypond[quote,verbatim,ragged-right]
335 pattern = #(define-music-function (parser location x y) (ly:music? ly:music?)
336 #{
337   $x e8 a b $y b a e
338 #})
339
340 \relative c''{
341   \pattern c8 c8\f
342   \pattern {d16 dis} { ais16-> b\p }
343 }
344 @end lilypond
345