<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <!-- header_tag --> <html lang="es"> <head> <title>Tutorial de Scheme - GNU LilyPond Learning Manual</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta name="description" content="GNU LilyPond Learning Manual"> <meta name="generator" content="makeinfo 4.11"> <link title="Top" rel="start" href="index.es.html#Top"> <link rel="prev" href="Templates.es.html#Templates" title="Plantillas"> <link rel="next" href="GNU-Free-Documentation-License.es.html#GNU-Free-Documentation-License" title="Licencia de documentación libre de GNU"> <link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage"> <!-- Copyright (C) 1999--2007 por los autores _The translation of the following copyright notice is provided for courtesy to non-English speakers, but only the notice in English legally counts._ _La traducción de la siguiente nota de copyright se ofrece como cortesía para las personas de habla no inglesa, pero únicamente la nota en inglés tiene validez legal._ Se otorga permiso para copiar, distribuir y/o modificar este documento bajo los términos de la Licencia de Documentación Libre de GNU, versión 1.1 o cualquier versión posterior publicada por la Free Software Foundation; sin ninguna de las secciones invariantes. Se incluye una copia de esta licencia dentro de la sección titulada ``Licencia de Documentación Libre de GNU''. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with no Invariant Sections. A copy of the license is included in the section entitled ``GNU Free Documentation License''. --> <meta http-equiv="Content-Style-Type" content="text/css"> <style type="text/css"><!-- pre.display { font-family:inherit } pre.format { font-family:inherit } pre.smalldisplay { font-family:inherit; font-size:smaller } pre.smallformat { font-family:inherit; font-size:smaller } pre.smallexample { font-size:smaller } pre.smalllisp { font-size:smaller } span.sc { font-variant:small-caps } span.roman { font-family:serif; font-weight:normal; } span.sansserif { font-family:sans-serif; font-weight:normal; } hr { border:0; height:1; color: #000000; background-color: #000000; } /* hr { border: none; height: 1px; color: #666666; background-color: #666666; } body { border-left: 1px solid #666666; border-right: 1px solid #666666; color: #332d28; margin-right: auto; margin-left: auto; width: 60em; list-style-type: square; font-family: Arial,Helvetica,sans-serif; padding-right: 1em; padding-left: 1em; } a { border-bottom: 1px dashed #344242; text-decoration: none; color: #344242; } a:link { text-decoration: none; } a:visited { border-bottom: 1px dashed #666666; color: #666666; } a:active { border-bottom: 1px solid #00cccc; color: #00cccc; } a:hover { border-bottom: 1px solid #1d7b85; color: #1d7b85; } blockquote { border: 1px solid #cccccc; padding: 3px; width: 40em; } .node { border-left: 1px solid #666666; margin: -0.5em 0px 1em; padding: 2px 1px 0px; font-style: italic; } .node a { border: none; text-decoration: underline; font-style: normal; font-weight: bold; } .verbatim { font-family: "Courier New",Courier,monospace; } .unnumberedsubsubsec { font-size: large; color: #1d7b85; } .subsubheading { font-size: large; color: #3b220d; } .contents { border: 1px dashed #339999; margin: 3px 2em; list-style-type: square; padding-right: 1em; width: 40em; background-color: #fcfff9; } .contents a { border-bottom: 1px dashed #423d34; text-decoration: none; color: #423d34; } .contents a:visited { border-bottom: 1px dashed #666666; color: #666666; } .contents a:active { border-bottom: 1px solid #f0d86d; color: #f0d86d; } .contents a:hover { border-bottom: 1px solid #3b220d; color: #3b220d; } .menu { border-left: 1px dashed #339999; margin: 3px 2em 1em; list-style-type: square; padding-left: 1.4em; width: 40em; } .unnumbered { } h2 { font-size: x-large; color: #1d7b85; } */ --></style> </head> <BODY BGCOLOR=WHITE TEXT=BLACK> <div class="node"> <p> <a name="Scheme-tutorial"></a> Siguiente: <a rel="next" accesskey="n" href="GNU-Free-Documentation-License.es.html#GNU-Free-Documentation-License">GNU Free Documentation License</a>, Anterior: <a rel="previous" accesskey="p" href="Templates.es.html#Templates">Plantillas</a>, Arriba: <a rel="up" accesskey="u" href="index.es.html#Top">Inicio</a> <hr> </div> <h2 class="appendix">Apéndice B Tutorial de Scheme</h2> <p><a name="index-g_t_0023-427"></a><a name="index-g_t_0023-428"></a> <a name="index-Scheme-429"></a><a name="index-GUILE-430"></a><a name="index-Scheme_002c-c_00c3_00b3digo-en-l_00c3_00adnea-431"></a><a name="index-acceder-a-Scheme-432"></a><a name="index-evaluar-Scheme-433"></a><a name="index-LISP-434"></a> LilyPond utiliza el lenguaje de programación Scheme, tanto como parte de la sintaxis del código de entrada, como para servir de mecanismo interno que une los módulos del programa entre sí. Esta sección es una panorámica muy breve sobre cómo introducir datos en Scheme. Si quiere saber más sobre Scheme, consulte <a href="http://www.schemers.org">http://www.schemers.org</a>. <p>Lo más básico de un lenguaje son los datos: números, cadenas de caracteres, listas, etc. He aquí una lista de los tipos de datos que son de relevancia respecto de la entrada de LilyPond. <dl> <dt>Booleanos<dd>Los valores Booleanos son Verdadero y Falso. Verdadero en Scheme es <code>#t</code> y Falso es <code>#f</code>. <a name="index-g_t_0023_0023t-435"></a><a name="index-g_t_0023_0023t-436"></a> <a name="index-g_t_0023_0023f-437"></a><a name="index-g_t_0023_0023f-438"></a> <br><dt>Números<dd>Los números se escriben de la forma normal, <code>1</code> es el número (entero) uno, mientras que <code>-1.5</code> es un número en coma flotante (un número no entero). <br><dt>Cadenas<dd>Las cadenas se encierran entre comillas: <pre class="example"> "esto es una cadena" </pre> <p>Las cadenas pueden abarcar varias líneas: <pre class="example"> "esto es una cadena" </pre> <p>También se pueden añadir comillas y saltos de línea con las llamadas secuencias de escape. La cadena <code>a dijo "b"</code> se escribe como <pre class="example"> "a dijo \"b\"" </pre> <p>Los saltos de línea t las barras invertidas se escapan mediante <code>\n</code> y <code>\\</code> respectivamente. </dl> <p>En un archivo de música, los fragmentos de código de Scheme se escriben con el signo de almohadilla <code>#</code>. Así, los ejemplos anteriores traducidos a LilyPond son: <pre class="example">##t ##f #1 #-1.5 #"esto es una cadena" #"esto es una cadena" </pre> <p>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>#</code> en todas partes. <p>Scheme se puede usar para hacer cálculos. Utiliza sintaxis <em>prefija</em>. Sumar 1 y 2 se escribe como <code>(+ 1 2)</code> y no como el tradicional 1+2. <pre class="lisp">#(+ 1 2) #3 </pre> <p>La flecha muestra que el resultado de evaluar <code>(+ 1 2)</code> es <code>3</code>. Los cálculos se pueden anidar; el resultado de una función se puede usar para otro cálculo. <pre class="lisp">#(+ 1 (* 3 4)) #(+ 1 12) #13 </pre> <p>Estos cálculos son ejemplos de evaluaciones; una expresión como <code>(* 3 4)</code> se sustituye por su valor <code>12</code>. Algo similar ocurre con las variables. Después de haber definido una variable <pre class="example">doce = #12 </pre> <p class="noindent">las variables se pueden usar también dentro de las expresiones, aquí <pre class="example">veintiCuatro = #(* 2 doce) </pre> <p class="noindent">el número 24 se almacena dentro de la variable <code>veintiCuatro</code>. La misma asignación se puede hacer también completamente en Scheme, <pre class="example">#(define veintiCuatro (* 2 doce)) </pre> <p>El <em>nombre</em> de una variable también es una expresión, similar a un número o una cadena. Se introduce como <pre class="example">#'veintiCuatro </pre> <p><a name="index-g_t_0023_0027symbol-439"></a><a name="index-g_t_0023_0027symbol-440"></a> <a name="index-comillas-en-Scheme-441"></a> El apóstrofe <code>'</code> evita que el intérprete de Scheme sustituya <code>veintiCuatro</code> por <code>24</code>. En vez de esto, obtenemos el nombre <code>veintiCuatro</code>. <p>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 <pre class="example">\override Stem #'thickness = #2.6 </pre> <p>Esta instrucción ajusta el aspecto de las plicas. El valor <code>2.6</code> se pone dentro de la variable <code>thickness</code> de un objeto <code>Stem</code>. <code>thickness</code> se mide a partir del grosor de las líneas del pentagrama, y así estas plicas serán <code>2.6</code> 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</code> en el ejemplo anterior) y las variables de los objetos internos, llamaremos a las últimas ‘propiedades’ y a las primeras ‘variables.’ Así, el objeto plica tiene una propiedad <code>thickness</code> (grosor), mientras que <code>veintiCuatro</code> es una variable. <p><a name="index-propiedades-frente-a-variables-442"></a><a name="index-variables-frente-a-propiedades-443"></a> 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</code>. Una pareja<a rel="footnote" href="#fn-1" name="fnd-1"><sup>1</sup></a> se introduce como <code>(primero . segundo)</code> y, como los símbolos, se deben preceder de un apóstrofe: <pre class="example">\override TextScript #'extra-offset = #'(1 . 2) </pre> <p>Esto asigna la pareja (1, 2) a la propiedad <code>extra-offset</code> 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. <p>Los dos elementos de una pareja pueden ser valores arbitrarios, por ejemplo <pre class="example">#'(1 . 2) #'(#t . #f) #'("bla-bla" . 3.14159265) </pre> <p>Una lista se escribe encerrando sus elementos entre paréntesis, y añadiendo un apóstrofe. Por ejemplo, <pre class="example">#'(1 2 3) #'(1 2 "cadena" #f) </pre> <p>Todo el tiempo hemos estado usando listas. Un cálculo, como <code>(+ 1 2)</code> también es una lista (que contiene el símbolo <code>+</code> y los números 1 y 2). Normalmente, las listas se interpretan como cálculos, y el intérprete de Scheme sustituye el resultado del cálculo. Para escribir una lista, detenemos la evaluación. Esto se hace precediendo la lista por un apóstrofe <code>'</code>. Así, para los cálculos no usamos ningún apóstrofe. <p>Dentro de una lista o pareja precedida de apóstrofe, no hay necesidad de escribir ningún apóstrofe más. Lo siguiente es una pareja de símbolos, una lista de símbolos y una lista de listas respectivamente: <pre class="example">#'(stem . head) #'(staff clef key-signature) #'((1) (2)) </pre> <ul class="menu"> <li><a accesskey="1" href="Tweaking-with-Scheme.es.html#Tweaking-with-Scheme">Trucos con Scheme</a> </ul> <div class="footnote"> <hr> <h4>Notas al pie</h4><p class="footnote"><small>[<a name="fn-1" href="#fnd-1">1</a>]</small> En la terminología de Scheme, la pareja se llama <code>cons</code>, y sus dos elementos se llaman <code>car</code> y <code>cdr</code> respectivamente.</p> <hr></div> <!-- footer_tag --><div class="node"> <p> Siguiente: <a rel="next" accesskey="n" href="GNU-Free-Documentation-License.es.html#GNU-Free-Documentation-License">GNU Free Documentation License</a>, Anterior: <a rel="previous" accesskey="p" href="Templates.es.html#Templates">Plantillas</a>, Arriba: <a rel="up" accesskey="u" href="index.es.html#Top">Inicio</a> </div> <div style="background-color: #e8ffe8; padding: 2; border: #c0ffc0 1px solid;"> <p> <font size="-1"> Esta página corresponde a LilyPond-2.11.57 (rama de desarrollo). <br> <address> Informe de los fallos a través de la lista en español <a href="http://es.groups.yahoo.com/group/lilypond-es/">lilypond-es</a>, o en inglés a través de <a href="http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.bugs">http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.bugs</a>. </address> <br> Se agradecen las <a href="http://lilypond.org/web/devel/participating/documentation-adding">sugerencias para la documentación</a>. </font> </p> </div> <P> Otros idiomas: <a href="Scheme-tutorial.html">English</a>, <a href="Scheme-tutorial.de.html">deutsch</a>. <BR> </P> </BODY></html>