]> git.donarmstrong.com Git - lilypond.git/blobdiff - Documentation/es/extending/scheme-tutorial.itely
Merge branch 'master' of git://git.savannah.gnu.org/lilypond.git
[lilypond.git] / Documentation / es / extending / scheme-tutorial.itely
index 94b96ec504dfbf5ff208bc785e88ee8e35b94537..c804ce420cbbde65e29006859306036904aa4557 100644 (file)
@@ -1,14 +1,14 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
 
 @ignore
-    Translation of GIT committish: e18567dccce0f16b680e6b7e562329e5f8bcae59
+    Translation of GIT committish: 2055f35c47a045a50a01ff4dba8524322cfc3b48
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
     Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.12.0"
+@c \version "2.14.0"
 
 @node Tutorial de Scheme
 @appendix Tutorial de Scheme
@@ -547,6 +547,11 @@ guile> (menor-que-diez? 15)
 
 @subheading Valores de retorno
 
+Los procedimientos de Scheme siempre devuelven un valor de retorno,
+que es el valor de la última expresión ejecutada en el procedimiento.
+El valor de retorno puede ser cualquier valor de Scheme válido,
+incluso una estructura de datos compleja o un procedimiento.
+
 A veces, el usuario quiere tener varias expresiones de Scheme dentro
 de un procedimiento.  Existen dos formas en que se pueden combinar
 distintas expresiones.  La primera es el procedimiento @code{begin},
@@ -635,22 +640,29 @@ guile> (cond ((< a b) "a es menor que b")
 @subsection Sintaxis del Scheme de LilyPond
 @translationof LilyPond Scheme syntax
 
-En un archivo de música, los fragmentos de código de Scheme se
-escriben con el signo de almohadilla @code{#}.  Así, los ejemplos
-anteriores traducidos a LilyPond son:
+El intérprete Guile forma parte de LilyPond, lo que significa que se
+puede incluir Scheme dentro de los archivos de entrada de LilyPond.
+La marca de almohadilla @code{#} se utiliza para indicar al analizador
+sintáctico de LilyPond que lo siguiente es un valor de Scheme.
+
+Una vez el analizador sintáctico se encuentra con un símbolo de
+almohadilla, la entrada se le pasa al intérprete Guile para evaluar la
+expresión de Scheme.  El intérprete continúa procesando la entrada
+hasta que se encuentra con el final de una expresión de Scheme.
+
+Los procedimientos de Scheme se pueden definir dentro de los archivos
+de entrada de LilyPond:
 
 @example
-##t ##f
-#1 #-1.5
-#"esto es una cadena"
-#"esto
-es
-una cadena"
+#(define (average a b c) (/ (+ a b c) 3))
 @end example
 
 Observe que los comentarios de LilyPond (@code{%} y @code{%@{ %@}}) no
-se pueden utilizar dentro del código de Scheme.  Los comentarios en
-el Scheme de Guile se introducen como sigue:
+se pueden utilizar dentro del código de Scheme, ni siquiera dentro de
+un archivo de entrada de LilyPond input file, porque es el intérprete
+Guile, y no el analizador sintáctico de LilyPond, el que está
+interpretando la expresión de Scheme.  Los comentarios en el Scheme de
+Guile se introducen como sigue:
 
 @example
 ; esto es un comentario de una línea
@@ -662,9 +674,13 @@ el Scheme de Guile se introducen como sigue:
 !#
 @end example
 
-Se pueden combinar en un mismo archivo de música varias expresiones de
-Scheme consecutivas mediante la utilización del operador @code{begin}.
-Ello permite que el número de marcas de cuadradillo se reduzca a una.
+Durante el resto de esta sección, supondremos que los datos se
+introducen en un archivo de música, por lo que añadiremos almohadillas
+@code{#} al principio de todas las expresiones de Scheme.
+
+Todas las expresiones de Scheme del nivel jerárquico superior dentro
+de un archivo de entrada de LilyPond se pueden combinar en una sola
+expresión de Scheme mediante la utilización del operador @code{begin}:
 
 @example
 #(begin
@@ -672,38 +688,35 @@ Ello permite que el número de marcas de cuadradillo se reduzca a una.
   (define menganito 1))
 @end example
 
-Si el @code{#} va seguido de un paréntesis de apertura, @code{(}, como
-en el ejemplo anterior, el analizador sintáctico permanece dentro del
-modo de Scheme hasta que encuentra el paréntesis de cierre
-correspondiente, @code{)}, por lo que no son necesarios más símbolos
-de @code{#} para introducir una sección de Scheme.
-
-Durante el resto de esta sección, supondremos que los datos se
-introducen en un archivo de música, por lo que añadiremos almohadillas
-@code{#} en todas partes.
 
 @node Variables de LilyPond
 @subsection Variables de LilyPond
 @translationof LilyPond variables
 
-@c TODO -- make this read right
-
-Algo similar ocurre con las variables.  Después de definir una
-variable,
+Las variables de LilyPond se almacenan internamente en la forma de
+variables de Scheme.  Así,
 
 @example
 doce = 12
 @end example
 
 @noindent
-las variables se pueden usar también dentro de expresiones, aquí
+equivale a
+
+@example
+#(define doce 12)
+@end example
+
+Esto significa que las variables de LilyPond están disponibles para su
+uso dentro de expresiones de Scheme.  Por ejemplo, podríamos usar
 
 @example
 veintiCuatro = (* 2 doce)
 @end example
 
 @noindent
-el número 24 se almacena dentro de la variable @code{veintiCuatro}.
+lo que daría lugar a que el número 24 se almacenase dentro de la
+variable @code{veintiCuatro} de LilyPond (y de Scheme).
 
 @node Variables de entrada y Scheme
 @subsection Variables de entrada y Scheme
@@ -727,6 +740,7 @@ independiente de la @code{\traLaLa} externa.
 traLaLa = @{ c'4 d'4 @}
 \layout @{ traLaLa = 1.0 @}
 @end example
+
 @c
 En efecto, cada archivo de entrada constituye un ámbito, y cada bloque
 @code{\header}, @code{\midi} y @code{\layout} son ámbitos anidados
@@ -734,20 +748,20 @@ dentro del ámbito de nivel superior.
 
 Tanto las variables como los ámbitos están implementados en el sistema
 de módulos de GUILE.  A cada ámbito se adjunta un módulo anónimo de
-Scheme.  Una asignación de la forma
+Scheme.  Una asignación de la forma:
 
 @example
 traLaLa = @{ c'4 d'4 @}
 @end example
 
 @noindent
-se convierte internamente en una definición de Scheme
+se convierte internamente en una definición de Scheme:
 
 @example
 (define traLaLa @var{Valor Scheme de `@code{... }'})
 @end example
 
-Esto significa que las variables de entrada y las variables de Scheme
+Esto significa que las variables de LilyPond y las variables de Scheme
 se pueden mezclar con libertad.  En el ejemplo siguiente, se almacena
 un fragmento de música en la variable @code{traLaLa}, y se duplica
 usando Scheme.  El resultado se importa dentro de un bloque
@@ -806,32 +820,35 @@ No es posible mezclar variables de Scheme y de LilyPond con la opción
 @code{--safe}.
 
 
-
-
 @node Propiedades de los objetos
 @subsection Propiedades de los objetos
 @translationof Object properties
 
-Esta sintaxis se usará con mucha frecuencia, pues muchos de los trucos
-de presentación consisten en asignar valores (de Scheme) a variables
-internas, por ejemplo
+Las propiedades de los objetos se almacenan en LilyPond en forma de
+cadenas de listas-A, que son listas de listas-A.  Las propiedades se
+establecen añadiendo valores al principio de la lista de propiedades.
+Las propiedades se leen extrayendo valores de las listas-A.
+
+El establecimiento de un valor nuevo para una propiedad requiere la
+asignación de un valor a la lista-A con una clave y un valor.  La
+sintaxis de LilyPond para hacer esto es la siguiente:
 
 @example
 \override Stem #'thickness = #2.6
 @end example
 
-Esta instrucción ajusta el aspecto de las plicas.  El valor @code{2.6}
-se pone dentro de la variable @code{thickness} de un objeto
-@code{Stem}.  @code{thickness} se mide a partir del grosor de las
-líneas del pentagrama, y así estas plicas serán @code{2.6} veces el
-grosor de las líneas del pentagrama.  Esto hace que las plicas sean
-casi el doble de gruesas de lo normal.  Para distinguir entre las
-variables que se definen en los archivos de entrada (como
-@code{veintiCuatro} en el ejemplo anterior) y las variables de los
-objetos internos, llamaremos a las últimas @q{propiedades} y a las
-primeras @q{variables.}  Así, el objeto plica tiene una propiedad
-@code{thickness} (grosor), mientras que @code{veintiCuatro} es una
-variable.
+Esta instrucción ajusta el aspecto de las plicas.  Se añade una
+entrada de lista-A @code{'(thickness . 2.6)} a la lista de propiedades
+de un objeto @code{Stem}.  @code{thickness} se mide a partir del
+grosor de las líneas del pentagrama, y así estas plicas serán
+@code{2.6} veces el grosor de las líneas del pentagrama.  Esto hace
+que las plicas sean casi el doble de gruesas de lo normal.  Para
+distinguir entre las variables que se definen en los archivos de
+entrada (como @code{veintiCuatro} en el ejemplo anterior) y las
+variables de los objetos internos, llamaremos a las últimas
+@q{propiedades} y a las primeras @q{variables.}  Así, el objeto plica
+tiene una propiedad @code{thickness} (grosor), mientras que
+@code{veintiCuatro} es una variable.
 
 @cindex propiedades frente a variables
 @cindex variables frente a propiedades
@@ -846,43 +863,77 @@ variable.
 
 @subheading Desplazamientos
 
-Los desplazamientos bidimensionales (coordenadas X e Y) así como los
-tamaños de los objetos (intervalos con un punto izquierdo y otro
-derecho) se introducen como @code{parejas}.  Una pareja@footnote{En la
-terminología de Scheme, la pareja se llama @code{cons}, y sus dos
-elementos se llaman @code{car} y @code{cdr} respectivamente.}  se
-introduce como @code{(primero . segundo)} y, como los símbolos, se deben
-preceder de un apóstrofo:
+Los desplazamientos bidimensionales (coordenadas X e Y) se almacenan
+como @code{parejas}.  El @code{car} del desplazamiento es la
+coordenada X, y el @code{cdr} es la coordenada Y.
 
 @example
 \override TextScript #'extra-offset = #'(1 . 2)
 @end example
 
-Esto asigna la pareja (1, 2) a la propiedad @code{extra-offset} del
-objeto TextScript.  Estos números se miden en espacios de pentagrama,
-y así esta instrucción mueve el objeto un espacio de pentagrama a la
-derecha, y dos espacios hacia arriba.
+Esto asigna la pareja @code{(1 . 2)} a la propiedad
+@code{extra-offset} del objeto TextScript.  Estos números se miden en
+espacios de pentagrama, y así esta instrucción mueve el objeto un
+espacio de pentagrama a la derecha, y dos espacios hacia arriba.
+
+Los procedimientos para trabajar con desplazamientos están en
+@file{scm/lily-library.scm}.
 
 @subheading Dimensiones
 
-HACER @c todo -- write something about extents
+Las parejas se usan también para almacenar intervalos, que representan
+un rango de números desde el mínimo (el @code{car}) hasta el máximo
+(el @code{cdr}).  Los intervalos se usan para almacenar las
+dimensiones en X y en Y de los objetos imprimibles.  Para dimensiones
+en X, el @code{car} es la coordenada X de la parte izquierda, y el
+@code{cdr} es la coordenada X de la parte derecha.  Para las
+dimensiones en Y, el @code{car} es la coordenada inferior, y el
+@code{cdr} es la coordenada superior.
+
+Los procedimientos para trabajar con intervalos están en
+@file{scm/lily-library.scm}.  Se deben usar estos procedimientos
+siempre que sea posible, para asegurar la consistencia del código.
 
 @subheading Listas-A de propiedades
 
-HACER @c todo -- write something about property alists
+Una lista-A de propiedades es una estructura de datos de LilyPond que
+es una lista-A cuyas claves son propiedades y cuyos valores son
+expresiones de Scheme que dan el valor deseado de la propiedad.
+
+Las propiedades de LilyPond son símbolos de Scheme, como por ejemplo
+@code{'thickness}.
 
 @subheading Cadenas de listas-A
 
-HACER @c todo -- write something about alist chains
+Una cadena de listas-A es una lista que contiene listas-A de
+propiedades.
+
+El conjunto de todas las propiedades que se aplican a un grob se
+almacena por lo general como una cadena de listas-A.  Para poder
+encontrar el valor de una propiedad determinada que debería tener un
+grob, se busca por todas las listas-A de la cadena, una a una,
+tratando de encontrar una entrada que contenga la clave de la
+propiedad.  Se devuelve la primera entrada de lista-A que se
+encuentre, y el valor es el valor de la propiedad.
+
+El procedimiento de Scheme @code{chain-assoc-get} se usa normalmente
+para obtener los valores de propiedades.
 
 @node Representación interna de la música
 @subsection Representación interna de la música
 @translationof Internal music representation
 
+Internamente, la música se representa como una lista de Scheme.  La
+lista contiene varios elementos que afectan a la salida impresa.  El
+análisis sintáctico es el proceso de convertir la música de la
+representación de entrada de LilyPond a la representación interna de
+Scheme.
+
 Cuando se analiza una expresión musical, se convierte en un conjunto
 de objetos musicales de Scheme.  La propiedad definitoria de un objeto
-musical es que ocupa un tiempo.  El tiempo es un número racional que
-mide la longitud de una pieza de música en redondas.
+musical es que ocupa un tiempo.  El tiempo que ocupa se llama
+@emph{duración}.  Las duraciones se expresan como un número racional
+que mide la longitud del objeto musical en redondas.
 
 Un objeto musical tiene tres clases de tipos:
 @itemize
@@ -1017,6 +1068,10 @@ cualquier información adicional (en este caso, un evento
 @subsection Propiedades musicales
 @translationof Music properties
 
+@c TODO -- make sure we delineate between @emph{music} properties,
+@c @emph{context} properties, and @emph{layout} properties.  These
+@c are potentially confusing.
+
 El objeto @code{NoteEvent} es el primer objeto de la propiedad
 @code{'elements} de @code{someNote}.
 
@@ -1141,7 +1196,7 @@ Ahora examinamos la entrada,
 
 Así pues, en nuestra función, tenemos que clonar esta expresión (de
 forma que tengamos dos notas para construir la secuencia), añadir
-@code{SlurEvents} a la propiedad @code{'elements} de cada una de
+@code{SlurEvent} a la propiedad @code{'elements} de cada una de
 ellas, y por último hacer una secuencia @code{SequentialMusic} con los
 dos @code{EventChords}.
 
@@ -1340,8 +1395,8 @@ Podemos verificar que esta función musical funciona correctamente:
 * Trucos con Scheme::
 @end menu
 
-@node Trucos con Scheme
-@c @section Trucos con Scheme
+@c @nod e Trucos con Scheme
+@c @sectio n Trucos con Scheme
 @translationof Tweaking with Scheme
 
 Hemos visto cómo la salida de LilyPond se puede modificar