]> git.donarmstrong.com Git - lilypond.git/blob - Documentation/es/learning/scheme-tutorial.itely
Doc-es: update of Pitches.
[lilypond.git] / Documentation / es / learning / scheme-tutorial.itely
1 @c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
2
3 @ignore
4     Translation of GIT committish: 5f51567fbc5d7a811e147ebd01f103e066f36b3a
5
6     When revising a translation, copy the HEAD committish of the
7     version that you are working on.  For details, see the Contributors'
8     Guide, node Updating translation committishes..
9 @end ignore
10
11 @c \version "2.12.0"
12
13
14 @node Tutorial de Scheme
15 @appendix Tutorial de Scheme
16 @translationof Scheme tutorial
17
18 @funindex #
19 @cindex Scheme
20 @cindex GUILE
21 @cindex Scheme, código en línea
22 @cindex acceder a Scheme
23 @cindex evaluar Scheme
24 @cindex LISP
25
26 LilyPond utiliza el lenguaje de programación Scheme, tanto como parte
27 de la sintaxis del código de entrada, como para servir de mecanismo
28 interno que une los módulos del programa entre sí.  Esta sección es
29 una panorámica muy breve sobre cómo introducir datos en Scheme.  Si
30 quiere saber más sobre Scheme, consulte
31 @uref{http://@/www@/.schemers@/.org}.
32
33 LilyPond utiliza la implementación GNU Guile de Scheme, que está
34 basada en el estándar @qq{R5RS} del lenguaje.  Si está aprendiendo
35 Scheme para usarlo con LilyPond, no se recomienda trabajar con una
36 implementación distinta (o que se refiera a un estándar diferente).
37 Hay información sobre Guile en
38 @uref{http://www.gnu.org/software/guile/}.  El estándar de Scheme
39 @qq{R5RS} se encuentra en
40 @uref{http://www.schemers.org/Documents/Standards/R5RS/}.
41
42 La instalación de LilyPond inclute también la de la implementación
43 Guile de Scheme.  Sobre casi todos los sistemas puede experimentar en
44 una @qq{caja de arena} de Scheme abriendo una ventana del terminal y
45 tecleando @q{guile}.  En algunos sistemas, sobre todo en Windows,
46 podría necesitar ajustar la variable de entorno @code{GUILE_LOAD_PATH}
47 a la carpeta @code{../usr/shr/guile/1.8} dentro de la instalación de
48 LilyPond (para conocer la ruta completa a esta carpeta, consulte
49 @ref{Otras fuentes de información}).  Como alternativa, los usuarios
50 de Windows pueden seleccionar simplemente @q{Ejecutar} del menú Inicio
51 e introducir @q{guile}.
52
53 El concepto más básico de un lenguaje son sus tipos de datos: números,
54 cadenas de caracteres, listas, etc.  He aquí una lista de los tipos de
55 datos que son de relevancia respecto de la entrada de LilyPond.
56
57 @table @asis
58 @item Booleanos
59 Los valores Booleanos son Verdadero y Falso.  Verdadero en Scheme es @code{#t}
60 y Falso es @code{#f}.
61 @funindex ##t
62 @funindex ##f
63
64 @item Números
65 Los números se escriben de la forma normal, @code{1} es el número
66 (entero) uno, mientras que @code{-1.5} es un número en coma flotante
67 (un número no entero).
68
69 @item Cadenas
70 Las cadenas se encierran entre comillas:
71
72 @example
73 "esto es una cadena"
74 @end example
75
76 Las cadenas pueden abarcar varias líneas:
77
78 @example
79 "esto
80 es
81 una cadena"
82 @end example
83
84 También se pueden añadir comillas y saltos de línea con las llamadas
85 secuencias de escape.  La cadena @code{a dijo "b"} se escribe como
86
87 @example
88 "a dijo \"b\""
89 @end example
90
91 Los saltos de línea t las barras invertidas se escapan mediante
92 @code{\n} y @code{\\} respectivamente.
93 @end table
94
95
96 En un archivo de música, los fragmentos de código de Scheme se
97 escriben con el signo de almohadilla @code{#}.  Así, los ejemplos
98 anteriores traducidos a LilyPond son:
99
100 @example
101 ##t ##f
102 #1 #-1.5
103 #"esto es una cadena"
104 #"esto
105 es
106 una cadena"
107 @end example
108
109 Observe que los comentarios de LilyPond (@code{%} y @code{%@{ %@}}) no
110 se puedden utilizar dentro del código de Scheme.  Los comentarios en
111 el Scheme de Guile se introducen como sigue:
112
113 @example
114 ; esto es un comentario de una línea
115
116 #!
117   Esto es un comentario de bloque (no anidable) estilo Guile
118   Pero se usan rara vez por parte de los Schemers y nunca dentro del
119   código fuente de LilyPond
120 !#
121 @end example
122
123 Se pueden combinar en un mismo archivo de música varias expresiones de
124 Scheme consecutivas mediante la utilización del operador @code{begin}.
125 Ello permite que el número de marcas de cuadradillo se redizca a una.
126
127 @example
128 #(begin
129   (define fulanito 0)
130   (define menganito 1))
131 @end example
132
133 Si el @code{#} va seguido de un paréntesis de apertura, @code{(}, como
134 en el ejemplo anterior, el analizador sintáctico permanece dentro del
135 modo de Scheme hasta que encuentra el paréntesis de cierre
136 correspondiente, @code{)}, por lo que no son necesarios más símbolos
137 de @code{#} para introducir una sección de Scheme.
138
139 Durante el resto de esta sección, supondremos que los datos se
140 introducen en un archivo de música, por lo que añadiremos almohadillas
141 @code{#} en todas partes.
142
143 Scheme se puede usar para hacer cálculos.  Utiliza sintaxis
144 @emph{prefija}.  Sumar 1 y@tie{}2 se escribe como @code{(+ 1 2)} y no
145 como el tradicional @math{1+2}.
146
147 @lisp
148 #(+ 1 2)
149   @result{} #3
150 @end lisp
151
152 La flecha @result{} muestra que el resultado de evaluar @code{(+ 1 2)}
153 es@tie{}@code{3}.  Los cálculos se pueden anidar; el resultado de una
154 función se puede usar para otro cálculo.
155
156 @lisp
157 #(+ 1 (* 3 4))
158   @result{} #(+ 1 12)
159   @result{} #13
160 @end lisp
161
162 Estos cálculos son ejemplos de evaluaciones; una expresión como
163 @code{(* 3 4)} se sustituye por su valor @code{12}.  Algo similar
164 ocurre con las variables.  Después de haber definido una variable
165
166 @example
167 doce = #12
168 @end example
169
170 @noindent
171 las variables se pueden usar también dentro de las expresiones, aquí
172
173 @example
174 veintiCuatro = #(* 2 doce)
175 @end example
176
177 @noindent
178 el número 24 se almacena dentro de la variable @code{veintiCuatro}.
179 La misma asignación se puede hacer también completamente en Scheme,
180
181 @example
182 #(define veintiCuatro (* 2 doce))
183 @end example
184
185 El @emph{nombre} de una variable también es una expresión, similar a
186 un número o una cadena.  Se introduce como
187
188 @example
189 #'veintiCuatro
190 @end example
191
192 @funindex #'symbol
193 @cindex comillas en Scheme
194
195 El apóstrofo @code{'} evita que el intérprete de Scheme sustituya
196 @code{veintiCuatro} por @code{24}.  En vez de esto, obtenemos el
197 nombre @code{veintiCuatro}.
198
199 Esta sintaxis se usará con mucha frecuencia, pues muchos de los trucos
200 de presentación consisten en asignar valores (de Scheme) a variables
201 internas, por ejemplo
202
203 @example
204 \override Stem #'thickness = #2.6
205 @end example
206
207 Esta instrucción ajusta el aspecto de las plicas.  El valor @code{2.6}
208 se pone dentro de la variable @code{thickness} de un objeto
209 @code{Stem}.  @code{thickness} se mide a partir del grosor de las
210 líneas del pentagrama, y así estas plicas serán @code{2.6} veces el
211 grosor de las líneas del pentagrama.  Esto hace que las plicas sean
212 casi el doble de gruesas de lo normal.  Para distinguir entre las
213 variables que se definen en los archivos de entrada (como
214 @code{veintiCuatro} en el ejemplo anterior) y las variables de los
215 objetos internos, llamaremos a las últimas @q{propiedades} y a las
216 primeras @q{variables.}  Así, el objeto plica tiene una propiedad
217 @code{thickness} (grosor), mientras que @code{veintiCuatro} es una
218 variable.
219
220 @cindex propiedades frente a variables
221 @cindex variables frente a propiedades
222
223 Los desplazamientos bidimensionales (coordenadas X e Y) así como los
224 tamaños de los objetos (intervalos con un punto izquierdo y otro
225 derecho) se introducen como @code{parejas}.  Una pareja@footnote{En la
226 terminología de Scheme, la pareja se llama @code{cons}, y sus dos
227 elementos se llaman @code{car} y @code{cdr} respectivamente.}  se
228 introduce como @code{(primero . segundo)} y, como los símbolos, se deben
229 preceder de un apóstrofo:
230
231 @example
232 \override TextScript #'extra-offset = #'(1 . 2)
233 @end example
234
235 Esto asigna la pareja (1, 2) a la propiedad @code{extra-offset} del
236 objeto TextScript.  Estos números se miden en espacios de pentagrama,
237 y así esta instrucción mueve el objeto un espacio de pentagrama a la
238 derecha, y dos espacios hacia arriba.
239
240 Los dos elementos de una pareja pueden ser valores arbitrarios, por
241 ejemplo
242
243 @example
244 #'(1 . 2)
245 #'(#t . #f)
246 #'("bla-bla" . 3.14159265)
247 @end example
248
249 Una lista se escribe encerrando sus elementos entre paréntesis, y
250 añadiendo un apóstrofo.  Por ejemplo,
251
252 @example
253 #'(1 2 3)
254 #'(1 2 "cadena" #f)
255 @end example
256
257 Todo el tiempo hemos estado usando listas.  Un cálculo, como @code{(+
258 1 2)} también es una lista (que contiene el símbolo @code{+} y los
259 números 1 y@tie{}2).  Normalmente, las listas se interpretan como
260 cálculos, y el intérprete de Scheme sustituye el resultado del
261 cálculo.  Para escribir una lista, detenemos la evaluación.  Esto se
262 hace precediendo la lista por un apóstrofo @code{'}.  Así, para los
263 cálculos no usamos ningún apóstrofo.
264
265 Dentro de una lista o pareja precedida de apóstrofo, no hay necesidad
266 de escribir ningún apóstrofo más.  Lo siguiente es una pareja de
267 símbolos, una lista de símbolos y una lista de listas respectivamente:
268
269 @example
270 #'(stem . head)
271 #'(staff clef key-signature)
272 #'((1) (2))
273 @end example
274
275
276 @menu
277 * Trucos con Scheme::
278 @end menu
279
280 @node Trucos con Scheme
281 @appendixsec Trucos con Scheme
282 @translationof Tweaking with Scheme
283
284 Hemos visto cómo la salida de LilyPond se puede modificar
285 profundamente usando instrucciones como @code{\override TextScript
286 #'extra-offset = ( 1 . -1)}.  Pero tenemos incluso mucho más poder si
287 utilizamos Scheme.  Para ver una explicación completa de esto,
288 consulte el @ref{Tutorial de Scheme}, y @ruser{Interfaces para programadores}.
289
290 Podemos usar Scheme simplemente para sobreescribir instrucciones con
291 @code{\override},
292
293 @c This isn't a valid example with skylining
294 @c It works fine without padText  -td
295
296 @ignore
297 @lilypond[quote,verbatim,ragged-right]
298 padText = #(define-music-function (parser location padding) (number?)
299 #{
300   \once \override TextScript #'padding = #$padding
301 #})
302
303 \relative c''' {
304   c4^"piu mosso" b a b
305   \padText #1.8
306   c4^"piu mosso" d e f
307   \padText #2.6
308   c4^"piu mosso" fis a g
309 }
310 @end lilypond
311 @end ignore
312
313 Lo podemos usar para crear instrucciones nuevas:
314
315 @c Check this is a valid example with skylining
316 @c It is - 'padding still works
317
318 @lilypond[quote,verbatim,ragged-right]
319 tempoPadded = #(define-music-function (parser location padding tempotext)
320   (number? string?)
321 #{
322   \once \override Score.MetronomeMark #'padding = $padding
323   \tempo \markup { \bold $tempotext }
324 #})
325
326 \relative c'' {
327   \tempo \markup { "Low tempo" }
328   c4 d e f g1
329   \tempoPadded #4.0 #"High tempo"
330   g4 f e d c1
331 }
332 @end lilypond
333
334 Incluso se le pueden pasar expresiones musicales:
335
336 @lilypond[quote,verbatim,ragged-right]
337 pattern = #(define-music-function (parser location x y) (ly:music? ly:music?)
338 #{
339   $x e8 a b $y b a e
340 #})
341
342 \relative c''{
343   \pattern c8 c8\f
344   \pattern {d16 dis} { ais16-> b\p }
345 }
346 @end lilypond
347