Sophie

Sophie

distrib > Mandriva > 2009.0 > i586 > by-pkgid > 3a7b4dfc766af1222d90c7f03a0844e6 > files > 7433

lilypond-doc-2.11.57-1mdv2009.0.i586.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<!-- header_tag -->
<html lang="en">
<head>
<title>Input variables and Scheme - GNU LilyPond Notation Reference</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="description" content="GNU LilyPond Notation Reference">
<meta name="generator" content="makeinfo 4.11">
<link title="Top" rel="start" href="index.es.html#Top">
<link rel="up" href="Programmer-interfaces.es.html#Programmer-interfaces" title="Programmer interfaces">
<link rel="next" href="Internal-music-representation.es.html#Internal-music-representation" title="Internal music representation">
<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
<!--
Copyright (C) 1999--2007 by the authors

     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="Input-variables-and-Scheme"></a>
Next:&nbsp;<a rel="next" accesskey="n" href="Internal-music-representation.es.html#Internal-music-representation">Internal music representation</a>,
Up:&nbsp;<a rel="up" accesskey="u" href="Programmer-interfaces.es.html#Programmer-interfaces">Programmer interfaces</a>
<hr>
</div>

<h4 class="subsection">6.2.1 Input variables and Scheme</h4>

<p>The input format supports the notion of variables: in the following
example, a music expression is assigned to a variable with the name
<code>traLaLa</code>.

<pre class="example">traLaLa = { c'4 d'4 }
</pre>
   <p class="noindent">There is also a form of scoping: in the following example, the
<code>\layout</code> block also contains a <code>traLaLa</code> variable, which is
independent of the outer <code>\traLaLa</code>.
<pre class="example">traLaLa = { c'4 d'4 }
\layout { traLaLa = 1.0 }
</pre>
   <p>In effect, each input file is a scope, and all <code>\header</code>,
<code>\midi</code>, and <code>\layout</code> blocks are scopes nested inside that
toplevel scope.

   <p>Both variables and scoping are implemented in the GUILE module system. 
An anonymous Scheme module is attached to each scope.  An assignment of
the form
<pre class="example">traLaLa = { c'4 d'4 }
</pre>
   <p class="noindent">is internally converted to a Scheme definition
<pre class="example">(define traLaLa <var>Scheme value of `</var><code>... </code><var>'</var>)
</pre>
   <p>This means that input variables and Scheme variables may be freely
mixed.  In the following example, a music fragment is stored in the
variable <code>traLaLa</code>, and duplicated using Scheme.  The result is
imported in a <code>\score</code> block by means of a second variable
<code>twice</code>:

<pre class="verbatim">
traLaLa = { c'4 d'4 }

%% dummy action to deal with parser lookahead
#(display "this needs to be here, sorry!")

#(define newLa (map ly:music-deep-copy
  (list traLaLa traLaLa)))
#(define twice
  (make-sequential-music newLa))

{ \twice }
</pre>
<p>
 <a href="../73/lily-16e287d9.ly">
  <img align="middle"
    border="0" src="../73/lily-16e287d9.png" alt="[image of music]">
 </a>
</p>

   <p>Due to parser lookahead

   <p>In this example, the assignment happens after parser has verified that
nothing interesting happens after <code>traLaLa = { ... }</code>.  Without
the dummy statement in the above example, the <code>newLa</code> definition
is executed before <code>traLaLa</code> is defined, leading to a syntax
error.

   <p>The above example shows how to &lsquo;export&rsquo; music expressions from the
input to the Scheme interpreter.  The opposite is also possible.  By
wrapping a Scheme value in the function <code>ly:export</code>, a Scheme
value is interpreted as if it were entered in LilyPond syntax. 
Instead of defining <code>\twice</code>, the example above could also have
been written as
<pre class="example">...
{ #(ly:export (make-sequential-music (list newLa))) }
</pre>
   <p>Scheme code is evaluated as soon as the parser encounters it.  To
define some Scheme code in a macro (to be called later), use
<a href="Void-functions.es.html#Void-functions">Void functions</a>, or

<pre class="example">#(define (nopc)
  (ly:set-option 'point-and-click #f))

...
#(nopc)
{ c'4 }
</pre>
   <p class="noindent">

<h5 class="subsubheading">Known issues and warnings</h5>

<p>Mixing Scheme and LilyPond variables is not possible with the
<code>--safe</code> option.

   <!-- footer_tag --><br><hr>
<div class="node">
<p>
Next:&nbsp;<a rel="next" accesskey="n" href="Internal-music-representation.es.html#Internal-music-representation">Internal music representation</a>,
Up:&nbsp;<a rel="up" accesskey="u" href="Programmer-interfaces.es.html#Programmer-interfaces">Programmer interfaces</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>

</BODY></html>