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