]> git.donarmstrong.com Git - lilypond.git/blob - Documentation/es/user/scheme-tutorial.itely
Merge master into nested-bookparts
[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: 85b54e04be6730bd0781f3135ee741010e099fd8
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.11.61"
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 Lo más básico de un lenguaje son los datos: números, cadenas de
32 caracteres, listas, etc.  He aquí una lista de los tipos de datos que
33 son de relevancia respecto de la entrada de LilyPond.
34
35 @table @asis
36 @item Booleanos
37 Los valores Booleanos son Verdadero y Falso.  Verdadero en Scheme es @code{#t}
38 y Falso es @code{#f}.
39 @funindex ##t
40 @funindex ##f
41
42 @item Números
43 Los números se escriben de la forma normal, @code{1} es el número
44 (entero) uno, mientras que @code{-1.5} es un número en coma flotante
45 (un número no entero).
46
47 @item Cadenas
48 Las cadenas se encierran entre comillas:
49
50 @example
51 "esto es una cadena"
52 @end example
53
54 Las cadenas pueden abarcar varias líneas:
55
56 @example
57 "esto
58 es
59 una cadena"
60 @end example
61
62 También se pueden añadir comillas y saltos de línea con las llamadas
63 secuencias de escape.  La cadena @code{a dijo "b"} se escribe como
64
65 @example
66 "a dijo \"b\""
67 @end example
68
69 Los saltos de línea t las barras invertidas se escapan mediante
70 @code{\n} y @code{\\} respectivamente.
71 @end table
72
73
74 En un archivo de música, los fragmentos de código de Scheme se
75 escriben con el signo de almohadilla @code{#}.  Así, los ejemplos
76 anteriores traducidos a LilyPond son:
77
78 @example
79 ##t ##f
80 #1 #-1.5
81 #"esto es una cadena"
82 #"esto
83 es
84 una cadena"
85 @end example
86
87 Durante el resto de esta sección, supondremos que los datos se
88 introducen en un archivo de música, por lo que añadiremos almohadillas
89 @code{#} en todas partes.
90
91 Scheme se puede usar para hacer cálculos.  Utiliza sintaxis
92 @emph{prefija}.  Sumar 1 y@tie{}2 se escribe como @code{(+ 1 2)} y no
93 como el tradicional @math{1+2}.
94
95 @lisp
96 #(+ 1 2)
97   @result{} #3
98 @end lisp
99
100 La flecha @result{} muestra que el resultado de evaluar @code{(+ 1 2)}
101 es@tie{}@code{3}.  Los cálculos se pueden anidar; el resultado de una
102 función se puede usar para otro cálculo.
103
104 @lisp
105 #(+ 1 (* 3 4))
106   @result{} #(+ 1 12)
107   @result{} #13
108 @end lisp
109
110 Estos cálculos son ejemplos de evaluaciones; una expresión como
111 @code{(* 3 4)} se sustituye por su valor @code{12}.  Algo similar
112 ocurre con las variables.  Después de haber definido una variable
113
114 @example
115 doce = #12
116 @end example
117
118 @noindent
119 las variables se pueden usar también dentro de las expresiones, aquí
120
121 @example
122 veintiCuatro = #(* 2 doce)
123 @end example
124
125 @noindent
126 el número 24 se almacena dentro de la variable @code{veintiCuatro}.
127 La misma asignación se puede hacer también completamente en Scheme,
128
129 @example
130 #(define veintiCuatro (* 2 doce))
131 @end example
132
133 El @emph{nombre} de una variable también es una expresión, similar a
134 un número o una cadena.  Se introduce como
135
136 @example
137 #'veintiCuatro
138 @end example
139
140 @funindex #'symbol
141 @cindex comillas en Scheme
142
143 El apóstrofo @code{'} evita que el intérprete de Scheme sustituya
144 @code{veintiCuatro} por @code{24}.  En vez de esto, obtenemos el
145 nombre @code{veintiCuatro}.
146
147 Esta sintaxis se usará con mucha frecuencia, pues muchos de los trucos
148 de presentación consisten en asignar valores (de Scheme) a variables
149 internas, por ejemplo
150
151 @example
152 \override Stem #'thickness = #2.6
153 @end example
154
155 Esta instrucción ajusta el aspecto de las plicas.  El valor @code{2.6}
156 se pone dentro de la variable @code{thickness} de un objeto
157 @code{Stem}.  @code{thickness} se mide a partir del grosor de las
158 líneas del pentagrama, y así estas plicas serán @code{2.6} veces el
159 grosor de las líneas del pentagrama.  Esto hace que las plicas sean
160 casi el doble de gruesas de lo normal.  Para distinguir entre las
161 variables que se definen en los archivos de entrada (como
162 @code{veintiCuatro} en el ejemplo anterior) y las variables de los
163 objetos internos, llamaremos a las últimas @q{propiedades} y a las
164 primeras @q{variables.}  Así, el objeto plica tiene una propiedad
165 @code{thickness} (grosor), mientras que @code{veintiCuatro} es una
166 variable.
167
168 @cindex propiedades frente a variables
169 @cindex variables frente a propiedades
170
171 Los desplazamientos bidimensionales (coordenadas X e Y) así como los
172 tamaños de los objetos (intervalos con un punto izquierdo y otro
173 derecho) se introducen como @code{parejas}.  Una pareja@footnote{En la
174 terminología de Scheme, la pareja se llama @code{cons}, y sus dos
175 elementos se llaman @code{car} y @code{cdr} respectivamente.}  se
176 introduce como @code{(primero . segundo)} y, como los símbolos, se deben
177 preceder de un apóstrofo:
178
179 @example
180 \override TextScript #'extra-offset = #'(1 . 2)
181 @end example
182
183 Esto asigna la pareja (1, 2) a la propiedad @code{extra-offset} del
184 objeto TextScript.  Estos números se miden en espacios de pentagrama,
185 y así esta instrucción mueve el objeto un espacio de pentagrama a la
186 derecha, y dos espacios hacia arriba.
187
188 Los dos elementos de una pareja pueden ser valores arbitrarios, por
189 ejemplo
190
191 @example
192 #'(1 . 2)
193 #'(#t . #f)
194 #'("bla-bla" . 3.14159265)
195 @end example
196
197 Una lista se escribe encerrando sus elementos entre paréntesis, y
198 añadiendo un apóstrofo.  Por ejemplo,
199
200 @example
201 #'(1 2 3)
202 #'(1 2 "cadena" #f)
203 @end example
204
205 Todo el tiempo hemos estado usando listas.  Un cálculo, como @code{(+
206 1 2)} también es una lista (que contiene el símbolo @code{+} y los
207 números 1 y@tie{}2).  Normalmente, las listas se interpretan como
208 cálculos, y el intérprete de Scheme sustituye el resultado del
209 cálculo.  Para escribir una lista, detenemos la evaluación.  Esto se
210 hace precediendo la lista por un apóstrofo @code{'}.  Así, para los
211 cálculos no usamos ningún apóstrofo.
212
213 Dentro de una lista o pareja precedida de apóstrofo, no hay necesidad
214 de escribir ningún apóstrofo más.  Lo siguiente es una pareja de
215 símbolos, una lista de símbolos y una lista de listas respectivamente:
216
217 @example
218 #'(stem . head)
219 #'(staff clef key-signature)
220 #'((1) (2))
221 @end example
222
223
224 @menu
225 * Tweaking with Scheme::
226 @end menu
227
228 @node Tweaking with Scheme
229 @appendixsec Tweaking with Scheme
230
231 Hemos visto cómo la salida de LilyPond se puede modificar
232 profundamente usando instrucciones como @code{\override TextScript
233 #'extra-offset = ( 1 . -1)}.  Pero tenemos incluso mucho más poder si
234 utilizamos Scheme.  Para ver una explicación completa de esto,
235 consulte el @ref{Scheme tutorial}, y @ruser{Interfaces for
236 programmers}.
237
238 Podemos usar Scheme simplemente para sobreescribir instrucciones con
239 @code{\override},
240
241 @c This isn't a valid example with skylining
242 @c It works fine without padText  -td
243
244 @ignore
245 @lilypond[quote,verbatim,ragged-right]
246 padText = #(define-music-function (parser location padding) (number?)
247 #{
248   \once \override TextScript #'padding = #$padding
249 #})
250
251 \relative c''' {
252   c4^"piu mosso" b a b
253   \padText #1.8
254   c4^"piu mosso" d e f
255   \padText #2.6
256   c4^"piu mosso" fis a g
257 }
258 @end lilypond
259 @end ignore
260
261 Lo podemos usar para crear instrucciones nuevas:
262
263 @c Check this is a valid example with skylining
264 @c It is - 'padding still works
265
266 @lilypond[quote,verbatim,ragged-right]
267 tempoMark = #(define-music-function (parser location padding marktext)
268                                     (number? string?)
269 #{
270   \once \override Score . RehearsalMark #'padding = $padding
271   \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0)
272   \mark \markup { \bold $marktext }
273 #})
274
275 \relative c'' {
276   c2 e
277   \tempoMark #3.0 #"Allegro"
278   g c
279 }
280 @end lilypond
281
282 Incluso se le pueden pasar expresiones musicales:
283
284 @lilypond[quote,verbatim,ragged-right]
285 pattern = #(define-music-function (parser location x y) (ly:music? ly:music?)
286 #{
287   $x e8 a b $y b a e
288 #})
289
290 \relative c''{
291   \pattern c8 c8\f
292   \pattern {d16 dis} { ais16-> b\p }
293 }
294 @end lilypond
295