[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Variables variées...
From: |
Cile |
Subject: |
Re: Variables variées... |
Date: |
Fri, 03 Sep 2010 16:02:31 +0200 |
User-agent: |
Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US; rv:1.9.2.8) Gecko/20100802 Thunderbird/3.1.2 |
Bonjour !
On 03/09/2010 14:55, Jean-Christophe D wrote:
Cela ressemble à une option de compilation, dans le but d'insérer
systématiquement des variables ou paramètres globaux sans avoir à les déclarer
dans chaque source... A mon niveau, la fonction \include le fait
également, et je m'en contente.
Je suis assez d'accord, cette option peut être bien pratique mais écrire
un \include pour les fonctions utilisées dans la partition est plus
ingénieux. Après c'est vrai que cela peut être pratique pour changer la
présentation par exemple sans avoir à toucher au fichier d'origine.
Je précise donc ma question : il ne s'agit pas d'inclure du code, mais de
mettre en variable un extrait quelconque de code LilyPond (peu importe s'il
est ensuite inclu en local ou en global).
Ce que tu demandes est très clairement impossible. Tu voudrais qu'une
variable soit une fonction, hors ce sont 2 choses différentes répondant
à des besoins différents.
Pour reprendre ma question de départ en exemple, je trouverais pratique de
pouvoir écrire :
SingHI = [ \transpose do do' ] % crochets...
--ou bien--
SingLow = { \transpose do do, } % ...ou parenthèses, ou n'importe quoi
d'autre...
--ou encore --
SingBass = \transpose do' do, % ...voire rien du tout !
La fonction transpose prend 3 arguments pour fonctionner. Les 2 premiers
sont la note de départ et la note d'arrivée. Le 3e est la musique. Ces
arguments ne sont pas optionnels, ils doivent impérativement être
précisés à la suite de \transpose
Je pense qu'il faut vraiment garder à l'esprit les déficitions de
"variable" et "fonction" :
- Qu'est ce qu'une variable ?
Une variable c'est une valeur, un objet, c'est un raccourcis vers une
information. Imagine que tu écrives un dictionnaire, il comporte plein
d'entrées (= variables), chacune d'elles associée à une définition (=
contenu de la variable). Tu peux ajouter de nouveau mots à ton
dictionnaire, tu peux modifier des définitions, etc. Mais tu ne peux pas
dire à ton dictionnaire de créer quelque chose. La définition que tu
écris dans ton dictionnaire doit être complète, tu ne peux pas écrire
que les 3 premiers mots de la définition, ce serait incompréhensible. Ta
définition doit se suffire à elle-même.
- Qu'est ce qu'une fonction ?
Une fonction exécute une action, une tâche, produit un résultat. Elle
traite une ou des informations et renvoie un résultat qui lui-même peut
être une information. C'est comme un petit programme qui transforme des
données en d'autres données.
Imaginons :
Je souhaite ajouter 3 à un nombre, nous disposons du "+" qui prend
impérativement 2 arguments.
Solution 1 :Je crée la variable \ajouteTrois
ajouteTrois = 3 +
resultat = \ajouteTrois 5
Lilypond exécute ton code, il arrive sur la définition de ajouteTrois.
"3 +", mais trois plus quoi ??? Pris séparément (donc comme un mot dans
le dictionnaire) cela ne veut rien dire ! Il est impossible d'écrire une
définition comme cela, il y a erreur.
Solution 2 : Créer une fonction \ajouteTrois
Le code scheme doit expliquer ceci : "Je suis une nouvelle fonction qui
nécessite un nombre x, mon résultat est 3 + x"
Ensuite quand on utilisera resultat = \ajouteTrois 5 Lilypond va
reconnaître qu'il s'agit d'une fonction, exécuter l'action demandée, et
renvoyer le résultat dans la variable resultat. Dans notre dictionnaire,
en cherchant à resultat nous auront 8
Je ne suis pas sûre d'être très claire avec mes histoires de
dictionnaires...
Enfin, gardons les 2 règles d'or :
- Quand une fonction utilise des arguments obligatoires ces arguments
doivent impérativement être spécifiés en même temps que l'on appelle la
fonction. Sinon ce serait comme donner une recette de cuisine sans les
ingrédients.
- Une variable est "inerte", elle n'exécute rien et ne prends pas de
paramètres.
Cela est valable dans tous les langages de programmation.
Bon après-midi
Cécile