]> git.donarmstrong.com Git - lilypond.git/blobdiff - Documentation/es/extending/scheme-tutorial.itely
Imported Upstream version 2.18.0
[lilypond.git] / Documentation / es / extending / scheme-tutorial.itely
index fdc27da0cc948669a1b0d5add5262fd8afcdf01a..ad55dbc2559c7361eb5f1031b50080852c349f32 100644 (file)
@@ -1,14 +1,14 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
 
 @ignore
-    Translation of GIT committish: 26a079ca2393d053315ef8dbef626c897dc9645a
+    Translation of GIT committish: 743dc7b27888c776186336cf4b330d3ebfc821de
 
     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.16.0"
+@c \version "2.17.11"
 
 @node Tutorial de Scheme
 @appendix Tutorial de Scheme
@@ -225,7 +225,16 @@ También existen tipos de datos compuestos en Scheme.  Entre los tipos
 más usados en la programación de LilyPond se encuentran las parejas,
 las listas, las listas-A y las tablas de hash.
 
-@subheading Parejas
+@menu
+* Parejas::
+* Listas::
+* Listas asociativas (listas-A)::
+* Tablas de hash::
+@end menu
+
+@node Parejas
+@unnumberedsubsubsec Parejas
+@translationof Pairs
 
 El tipo fundacional de datos compuestos de Scheme es la @code{pareja}.
 Como se espera por su nombre, una pareja son dos valores unidos en uno
@@ -268,7 +277,7 @@ los procedimientos de Scheme @code{car} y @code{cdr}, respectivamente.
 
 @lisp
 guile> (define mipareja (cons 123 "Hola")
-... )
+@dots{} )
 guile> (car mipareja)
 123
 guile> (cdr mipareja)
@@ -282,8 +291,9 @@ Nota: @code{cdr} se pronuncia "could-er", según Sussman y Abelson,
 véase
 @uref{http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-14.html#footnote_Temp_133}
 
-
-@subheading Listas
+@node Listas
+@unnumberedsubsubsec Listas
+@translationof Lists
 
 Una estructura de datos muy común en Scheme es la @emph{lista}.
 Formalmente, una lista se define como la lista vacía (representada
@@ -314,7 +324,10 @@ considera un dialecto de Lisp, donde @q{lisp} es una abreviatura de
 @q{List Processing} (proceso de listas).  Todas las expresiones de
 Scheme son listas.
 
-@subheading Listas asociativas (listas-A)
+
+@node Listas asociativas (listas-A)
+@unnumberedsubsubsec Listas asociativas (listas-A)
+@translationof Association lists (alists)
 
 Un tipo especial de listas son las @emph{listas asociativas} o
 @emph{listas-A}.  Se puede usar una lista-A para almacenar datos para
@@ -340,7 +353,10 @@ guile>
 Las listas-A se usan mucho en LilyPond para almacenar propiedades y
 otros datos.
 
-@subheading Tablas de hash
+
+@node Tablas de hash
+@unnumberedsubsubsec Tablas de hash
+@translationof Hash tables
 
 Estructuras de datos que se utilizan en LilyPond de forma ocasional.
 Una tabla de hash es similar a una matriz, pero los índices de la
@@ -517,7 +533,15 @@ Los procedimientos de Scheme son expresiones de Scheme ejecutables que
 devuelven un valor resultante de su ejecución.  También pueden
 manipular variables definidas fuera del procedimiento.
 
-@subheading Definir procedimientos
+@menu
+* Definir procedimientos::
+* Predicados::
+* Valores de retorno::
+@end menu
+
+@node Definir procedimientos
+@unnumberedsubsubsec Definir procedimientos
+@translationof Defining procedures
 
 Los procedimientos se definen en Scheme con @code{define}:
 
@@ -543,7 +567,10 @@ guile> (media 3 12)
 15/2
 @end lisp
 
-@subheading Predicados
+
+@node Predicados
+@unnumberedsubsubsec Predicados
+@translationof Predicates
 
 Los procedimientos de Scheme que devuelven valores booleanos se suelen
 llamar @emph{predicados}.  Por convenio (pero no por necesidad),
@@ -557,7 +584,10 @@ guile> (menor-que-diez? 15)
 #f
 @end lisp
 
-@subheading Valores de retorno
+
+@node Valores de retorno
+@unnumberedsubsubsec Valores de retorno
+@translationof Return values
 
 Los procedimientos de Scheme siempre devuelven un valor de retorno,
 que es el valor de la última expresión ejecutada en el procedimiento.
@@ -584,15 +614,23 @@ let:
 
 @lisp
 guile> (let ((x 2) (y 3) (z 4)) (display (+ x y)) (display (- z 4))
-... (+ (* x y) (/ z x)))
+@dots{} (+ (* x y) (/ z x)))
 508
 @end lisp
 
+
 @node Condicionales de Scheme
 @subsection Condicionales de Scheme
 @translationof Scheme conditionals
 
-@subheading if
+@menu
+* if::
+* cond::
+@end menu
+
+@node if
+@unnumberedsubsubsec if
+@translationof if
 
 Scheme tiene un procedimiento @code{if}:
 
@@ -613,14 +651,17 @@ guile> (if (> a b) "a es mayor que b" "a no es mayor que b")
 "a no es mayor que b"
 @end lisp
 
-@subheading cond
 
-Otro procedimiento condicional en scheme es @code{cond}:
+@node cond
+@unnumberedsubsubsec cond
+@translationof cond
+
+Otro procedimiento condicional en Scheme es @code{cond}:
 
 @example
 (cond (expresión-de-prueba-1 secuencia-de-expresiones-resultante-1)
       (expresión-de-prueba-2 secuencia-de-expresiones-resultante-2)
-      ...
+      @dots{}
       (expresión-de-prueba-n secuencia-de-expresiones-resultante-n))
 @end example
 
@@ -667,7 +708,7 @@ elementos y expresiones, de forma parecida a cómo el lenguaje humano
 se estructura en palabras y frases.  LilyPond tiene un analizador
 léxico que reconoce elementos indivisibles (números literales, cadenas
 de texto, elementos de Scheme, nombres de nota, etc.), y un analizador
-sintáctico que entiende la sintaxis, la @ruser{Gramática de LilyPond}.
+que entiende la sintaxis, la Gramática de LilyPond (@rcontrib{LilyPond grammar}).
 Una vez que sabe que se aplica una regla sintáctica concreta, ejecuta
 las acciones asociadas con ella.
 
@@ -843,7 +884,7 @@ traLaLa = @{ c'4 d'4 @}
 se convierte internamente en una definición de Scheme:
 
 @example
-(define traLaLa @var{Valor Scheme de `@code{... }'})
+(define traLaLa @var{Valor Scheme de `@code{@dots{}}'})
 @end example
 
 Esto significa que las variables de LilyPond y las variables de Scheme
@@ -887,7 +928,7 @@ LilyPond.  En lugar de definir @code{\twice}, el ejemplo anterior
 podría también haberse escrito como
 
 @example
-...
+@dots{}
 $(make-sequential-music newLa)
 @end example
 
@@ -913,7 +954,7 @@ Utilizándolos, la última parte del ejemplo se podría haber escrito
 como
 
 @example
-...
+@dots{}
 @{ #@@newLa @}
 @end example
 
@@ -935,7 +976,7 @@ procedimiento:
 #(define (nopc)
   (ly:set-option 'point-and-click #f))
 
-...
+@dots{}
 #(nopc)
 @{ c'4 @}
 @end example
@@ -960,7 +1001,7 @@ 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
+\override Stem.thickness = #2.6
 @end example
 
 Esta instrucción ajusta el aspecto de las plicas.  Se añade una
@@ -987,14 +1028,25 @@ tiene una propiedad @code{thickness} (grosor), mientras que
 @subsection Variables de LilyPond compuestas
 @translationof LilyPond compound variables
 
-@subheading Desplazamientos
+@menu
+* Desplazamientos::
+* Fracciones::
+* Dimensiones::
+* Listas-A de propiedades::
+* Cadenas de listas-A::
+@end menu
+
+
+@node Desplazamientos
+@unnumberedsubsubsec Desplazamientos
+@translationof Offsets
 
 Los desplazamientos bidimensionales (coordenadas X e Y) se almacenan
 como @emph{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)
+\override TextScript.extra-offset = #'(1 . 2)
 @end example
 
 Esto asigna la pareja @code{(1 . 2)} a la propiedad
@@ -1005,17 +1057,23 @@ 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}.
 
+@node Fracciones
+@unnumberedsubsubsec Fracciones
 @subheading Fractions
 
-Fractions as used by LilyPond are again stored as @emph{pairs}, this
-time of unsigned integers.  While Scheme can represent rational numbers
-as a native type, musically @samp{2/4} and @samp{1/2} are not the same,
-and we need to be able to distinguish between them.  Similarly there are
-no negative @q{fractions} in LilyPond's mind.  So @code{2/4} in LilyPond
-means @code{(2 . 4)} in Scheme, and @code{#2/4} in LilyPond means
-@code{1/2} in Scheme.
+Las fracciones tal y como se utilizan por parte de LilyPond
+se almacenan, de nuevo, como @emph{parejas}, esta
+vez de enteros sin signo.  Mientras que Scheme es capaz de representar números racionaes
+como un tipo nativo, musicalmente @samp{2/4} y @samp{1/2} no son lo mismo,
+y necesitamos poder distinguir entre ellos.  De igual forma, no existe el concepto
+de @q{fracciones} negativas en LilyPond.  Así pues, @code{2/4} en LilyPond
+significa @code{(2 . 4)} en Scheme, y @code{#2/4} en LilyPond significa
+@code{1/2} en Scheme.
+
 
-@subheading Dimensiones
+@node Dimensiones
+@unnumberedsubsubsec Dimensiones
+@translationof 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
@@ -1030,7 +1088,10 @@ 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
+
+@node Listas-A de propiedades
+@unnumberedsubsubsec Listas-A de propiedades
+@translationof 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
@@ -1039,7 +1100,10 @@ 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
+
+@node Cadenas de listas-A
+@unnumberedsubsubsec Cadenas de listas-A
+@translationof Alist chains
 
 Una cadena de listas-A es una lista que contiene listas-A de
 propiedades.
@@ -1162,7 +1226,7 @@ imprime lo siguiente:
                   'text
                   "f"))
           'duration
-          (ly:make-duration 2 0 1 1)
+          (ly:make-duration 2 0 1/1)
           'pitch
           (ly:make-pitch 0 0 0))))
 @end example
@@ -1198,11 +1262,11 @@ leer:
                               (make-music 'AbsoluteDynamicEvent
                                 'text
                                 "f"))
-              'duration (ly:make-duration 2 0 1 1)
+              'duration (ly:make-duration 2 0 1/1)
               'pitch    (ly:make-pitch 0 0 0))))
 @end example
 
-Una secuencia musical @code{@{ ... @}} tiene el nombre
+Una secuencia musical @code{@{ @dots{} @}} tiene el nombre
 @code{SequentialMusic}, y sus expresiones internas se almacenan coma
 una lista dentro de su propiedad @code{'elements}.  Una nota se
 representa como un objeto @code{NoteEvent} (que almacena las
@@ -1233,7 +1297,7 @@ someNote = c'
 (make-music
   'NoteEvent
   'duration
-  (ly:make-duration 2 0 1 1)
+  (ly:make-duration 2 0 1/1)
   'pitch
   (ly:make-pitch 0 0 0))
 @end example
@@ -1251,7 +1315,7 @@ someNote = <c'>
   (list (make-music
           'NoteEvent
           'duration
-          (ly:make-duration 2 0 1 1)
+          (ly:make-duration 2 0 1/1)
           'pitch
           (ly:make-pitch 0 0 0))))
 @end example
@@ -1269,7 +1333,7 @@ Scheme de una expresión musical.
 (make-music
   'NoteEvent
   'duration
-  (ly:make-duration 2 0 1 1)
+  (ly:make-duration 2 0 1/1)
   'pitch
   (ly:make-pitch 0 0 0))
 @end example
@@ -1322,7 +1386,7 @@ representación interna de la música con la que queremos terminar.
                   'span-direction
                   -1))
           'duration
-          (ly:make-duration 2 0 1 1)
+          (ly:make-duration 2 0 1/1)
           'pitch
           (ly:make-pitch 0 5 0))
         (make-music
@@ -1333,7 +1397,7 @@ representación interna de la música con la que queremos terminar.
                   'span-direction
                   1))
           'duration
-          (ly:make-duration 2 0 1 1)
+          (ly:make-duration 2 0 1/1)
           'pitch
           (ly:make-pitch 0 5 0))))
 @end example
@@ -1350,7 +1414,7 @@ Ahora examinamos la entrada,
 (make-music
   'NoteEvent
   'duration
-  (ly:make-duration 2 0 1 1)
+  (ly:make-duration 2 0 1/1)
   'pitch
   (ly:make-pitch 0 5 0))))
 @end example
@@ -1359,7 +1423,7 @@ 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{SlurEvent} a la propiedad @code{'articulations} de cada una de
 ellas, y por último hacer una secuencia @code{SequentialMusic} con los
-dos @code{EventChords}.  Para añadir a una propiedad, es útil saber
+dos elementos @code{NoteEvent}.  Para añadir a una propiedad, es útil saber
 que una propiedad no establecida se lee como @code{'()}, la lista
 vacía, así que no se requiere ninguna comprobación especial antes de
 que pongamos otro elemento delante de la propiedad
@@ -1386,15 +1450,15 @@ doubleSlur = #(define-music-function (parser location note) (ly:music?)
 @translationof Adding articulation to notes (example)
 
 La manera fácil de añadir articulación a las notas es mezclar dos
-expresiones musicales en un solo contexto, como se explica en
-@ruser{Crear contextos}.  Sin embargo, supongamos que queremos
+expresiones musicales en un solo contexto.
+Sin embargo, supongamos que queremos
 escribir una función musical que lo haga.  Esto tiene la ventaja
 adicional de que podemos usar esa función musical para añadir una
 articulación (como una instrucción de digitación) a una nota única
 dentro de un acorde, lo cual no es posible si nos limitamos a mezclar
 fragmentos de música independientes.
 
-Una @code{$variable} dentro de la notación @code{#@{...#@}} es como
+Una @code{$variable} dentro de la notación @code{#@{@dots{}#@}} es como
 una @code{\variable} normal en la notación clásica de LilyPond.
 Sabemos que
 
@@ -1421,7 +1485,7 @@ Scheme.  Empezamos examinando nuestra entrada y la salida deseada,
 (make-music
   'NoteEvent
   'duration
-  (ly:make-duration 2 0 1 1)
+  (ly:make-duration 2 0 1/1)
   'pitch
   (ly:make-pitch -1 0 0))))
 =====
@@ -1436,7 +1500,7 @@ Scheme.  Empezamos examinando nuestra entrada y la salida deseada,
           'articulation-type
           "accent"))
   'duration
-  (ly:make-duration 2 0 1 1)
+  (ly:make-duration 2 0 1/1)
   'pitch
   (ly:make-pitch -1 0 0))
 @end example
@@ -1466,7 +1530,7 @@ quedar claro a partir de su nombre (¡esto también es una buena
 práctica en otros lenguajes de programación!)
 
 @example
-"Add an accent..."
+"Add an accent@dots{}"
 @end example
 
 @noindent
@@ -1580,8 +1644,9 @@ Podemos verificar que esta función musical funciona correctamente:
 @c @transl ationof Tweaking with Scheme
 
 Hemos visto cómo la salida de LilyPond se puede modificar
-profundamente usando instrucciones como @code{\override TextScript
-#'extra-offset = ( 1 . -1)}.  Pero tenemos incluso mucho más poder si
+profundamente usando instrucciones como
+@code{\override TextScript.extra-offset = ( 1 . -1)}.
+Pero tenemos incluso mucho más poder si
 utilizamos Scheme.  Para ver una explicación completa de esto,
 consulte el @ref{Tutorial de Scheme}, y @ruser{Interfaces para programadores}.
 
@@ -1597,7 +1662,7 @@ TODO Find a simple example
 @lilypond[quote,verbatim,ragged-right]
 padText = #(define-music-function (parser location padding) (number?)
 #{
-  \once \override TextScript #'padding = #padding
+  \once \override TextScript.padding = #padding
 #})
 
 \relative c''' {
@@ -1621,7 +1686,7 @@ Lo podemos usar para crear instrucciones nuevas:
 tempoPadded = #(define-music-function (parser location padding tempotext)
   (number? markup?)
 #{
-  \once \override Score.MetronomeMark #'padding = #padding
+  \once \override Score.MetronomeMark.padding = #padding
   \tempo \markup { \bold #tempotext }
 #})