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