lilypond-user-fr
[Top][All Lists]
Advanced

[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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]