Subject: lilypond scheme-sandbox

From: Daniel Cartron <[email-masked]>
Date: Thu, 30 May 2013 18:39:03 +0200

Bonsoir

Je suis en train de me faire une fonction scheme que je teste dans le bac à 
sable. Elle fonctionne, mais une fois mise dans lilypond j'ai une erreur 
GUILE. Bien entendu j'ai ajouté les # là où il en faut, et d'ailleurs dans mon 
éditeur (kate) la coloration syntaxique me dit que tout est OK.

D'où ma question : tout ce qui marche dans le bac à sable marche-t-il aussi 
dans lilypond ? J'ai l'impression que c'est l'instruction (si on appelle ça 
comme ça en scheme) filter qui le gène. Si c'est je cas je suis pas dans la 
m...e j'ai passé trois jours à écrire tout mon code à partir de ça...

Merci pour vos infos.

-- 
Cordialement, Daniel Cartron
« Quand on épluche des oignons, il faut en même temps penser à quelqu'un qu'on 
aime bien et qui est mort, sans quoi ce sont des larmes perdues. »
François Cavanna - Le saviez-vous ?

---

From: Gilles <[email-masked]>
Date: Thu, 30 May 2013 22:27:14 +0200

> dans lilypond ?

En principe oui

> J'ai l'impression que c'est l'instruction (si on appelle ça

Peut-être que par exemple Lilypond attend une musique comme retour de  
fonction et qu'il a un string, une liste ou qqchose d'autre ?

-- 
Gilles

---

From: Daniel Cartron <[email-masked]>
Date: Fri, 31 May 2013 07:37:32 +0200

> > D'où ma question : tout ce qui marche dans le bac à sable marche-t-il

Alors je suis rassuré. En principe...

> fonction et qu'il a un string, une liste ou qqchose d'autre ?

voici ma fonction, qui pour l'instant effectivement attend un pitch, lequel 
sera récupéré par une autre fonction. 

#(define av-btn (filter (lambda (ref) 
	(and 
		(equal? (caar ref) note-name) 
		(equal? (cadr (car ref)) note-oct)  
		(equal? (caddr (car ref)) note-alt)
	)) kbd ))

Je me suis dit que ça coince parce que note-name et compagnie ne sont pas 
définies, mais mm en les définissant et en leur donnant une valeur plausible 
au préalable ça coince toujours pareil. Et kbd est correctement défini, 

Le message d'erreur :

Erreur : GUILE a signalé une erreur pour l'expression débutant ici
#
 (define av-btn (filter (lambda (ref) 

Merci

-- 
Cordialement, Daniel Cartron
« Shakespeare n'a jamais existé. Toutes ses pièces ont été écrites par un 
inconnu qui portait le même nom que lui. »
Alphonse Allais

---

From: elmamyra <[email-masked]>
Date: Fri, 31 May 2013 00:44:42 -0700 (PDT)

Bonjour,
Ta fonction n'est pas correctement définie. Les 2 syntaxes corrects sont:

(define (nom-de-la-fonction arg1 arg2 ...)
    (
        ;corp de la fonction
    )
)

ou 

(define nom-de-la-fonction (lambda (arg1 arg1 arg2 ...)
        ;corp de la fonction
    )
)

Ensuite je ne suis pas sûr de comprendre. Que doit faire exactement cette
fonction?
Que contient la variable "kdb"?

Daniel Cartron-2 wrote

--
View this message in context: http://lilypond-french-users.1298960.n2.nabble.com/lilypond-scheme-sandbox-tp7579856p7579864.html
Sent from the LilyPond French Users mailing list archive at Nabble.com.

---

From: Daniel Cartron <[email-masked]>
Date: Fri, 31 May 2013 10:26:58 +0200

> (define nom-de-la-fonction (lambda (arg1 arg1 arg2 ...)

Mais ce qui est curieux est que ça marche dans le bac à sable...
Et le peu d'exemples que j'ai trouvé sur le web étaient tous comme ça, mais 
il se peut que j'aie mal compris.

> Que contient la variable "kdb"?

j'ai raccourci pas mal mais en gros c'est comme ça :

(define kdb
 '(
  ( (4 0 0) . (1 1 2) )
  ( (6 0 0) . (2 1 2) )
  ( (0 1 0) . (1 1 3) )
  ( (0 1 0) . (2 1 3) )
 )
)

Ce qui est important c'est que je peux avoir deux ou trois fois la mm valeur 
à gauche mais pas à droite.

Ensuite à partir des trois valeurs d'un pitch comme par exemple 0 1 0 qui 
constitue la partie gauche je récupère une liste filtrée qui comprend dans 
mon exemple les deux dernières sous-listes. Ensuite je me sert de la partie 
droite pour générer des markup.

D'ailleurs je réalise que dans ma fonction j'ai inversé note-name et note-
oct. Pour le pb actuel ça ne change rien, mais je corrige.

> View this message in context:
> http://lilypond-french-users.1298960.n2.nabble.com/lilypond-scheme-sandbox-> tp7579856p7579864.html Sent from the LilyPond French Users mailing list
> archive at Nabble.com.
> 
> _______________________________________________
> liste de diffusion lilypond-user-fr
> [email-masked]
> https://lists.gnu.org/mailman/listinfo/lilypond-user-fr
-- 
Cordialement, Daniel Cartron
« Si le Christ était mort sur la chaise électrique, tous les petits 
chrétiens porteraient une chaise autour du cou. »
Serge Gainsbourg - Extrait d'une interview dans Libération - Novembre 1981

---

From: elmamyra <[email-masked]>
Date: Fri, 31 May 2013 02:24:58 -0700 (PDT)

D'accord je comprends mieux. Je pense que cela devrait fonctionner si "ref"
est une liste de 3 valeurs:

#(define (av-btn ref)
    (filter
       (lambda (pair) (equal? (car pair) ref) )
       kdb
    )
)

Et si tu veux que la fonction retourne uniquement les listes de droite:

#(define (av-btn ref)
    (map cdr
      (filter
         (lambda (pair) (equal? (car pair) ref) )
         kdb
      )
    )
)

Daniel Cartron-2 wrote

--
View this message in context: http://lilypond-french-users.1298960.n2.nabble.com/lilypond-scheme-sandbox-tp7579856p7579866.html
Sent from the LilyPond French Users mailing list archive at Nabble.com.

---

From: Daniel Cartron <[email-masked]>
Date: Fri, 31 May 2013 11:43:12 +0200

>          (lambda (pair) (equal? (car pair) ref) )

ok merci... Quand je pense aux haures que j'ai passé à essayer de comprendre 
comment marchent tous ces trucs...

En effet la deuxième ferait exactement ce que je veux, sauf que....
guile> (av-btn '(2 6 0))
standard input:533:5: While evaluating arguments to filter in expression 
(filter (lambda # #) kdb):

et pourtant :
guile> kbd
(((0 4 0) 1 1 2) ((0 6 0) 2 1 2) ((1 0 0) 1 1 3) ((1 1 0) 2 1 3) ((1 2 0) 1 1 
4) ((1 3 0) 2 1 4) ((1 4 0) 1 1 5) ((1 5 0) 2 1 5) ((2 0 0) 1 1 6) ((1 6 0) 2 
1 6) ((2 2 0) 1 1 7) ((2 1 0) 2 1 7) ((2 4 0) 1 1 8) ((2 3 0) 2 1 8) ((3 0 0) 
1 1 9) ((2 5 0) 2 1 9) ((3 2 0) 1 1 10) ((2 6 0) 2 1 10) ((0 0 0) 1 2 3) ((0 2 
0) 2 2 3) ((0 3 0) 1 2 4) ((0 4 0) 2 2 4) ((0 5 0) 1 2 5) ((0 6 -1/2) 2 2 5) 
((1 0 0) 1 2 6) ((1 1 0) 2 2 6) ((1 3 0) 1 2 7) ((1 2 0) 2 2 7) ((1 5 0) 1 2 
8) ((1 4 0) 2 2 8) ((1 0 0) 1 2 9) ((2 6 -1/2) 2 2 9) ((2 3 0) 1 2 10) ((2 1 
0) 2 2 10) ((2 5 0) 1 2 11) ((2 2 0) 2 2 11))

C'est pas comme ça qu'il faut s'en servir ?

-- 
Cordialement, Daniel Cartron
« Je suis un contemplateur fervent de l'effort d'autrui. Un paresseux, c'est 
tout simplement quelqu'un qui ne fait pas semblant de travailler. »
Tristan Bernard

---

From: Daniel Cartron <[email-masked]>
Date: Fri, 31 May 2013 11:48:50 +0200

> (filter (lambda # #) kdb):
standard input:523:7: Unbound variable: kdb

-- 
Cordialement, Daniel Cartron
« Il ne faut pas avoir peur du bonheur. C'est seulement un bon moment à 
passer. »
Romain Gary

---

From: elmamyra <[email-masked]>
Date: Fri, 31 May 2013 03:08:24 -0700 (PDT)

Daniel Cartron-2 wrote
> standard input:523:7: Unbound variable: kdb

Sais-tu que tu peux afficher ce que tu veux dans la console de lilypond
grâce à la fonction "display"?
J'ai jamais trouvé pratique d'utiliser l'interpréteur en console.
Essaye avec ça dans un fichier lilypond:

#(define kdb
 '(
  ( (4 0 0) . (1 1 2) )
  ( (6 0 0) . (2 1 2) )
  ( (0 1 0) . (1 1 3) )
  ( (0 1 0) . (2 1 3) )
 )
)

#(define (av-btn ref)
    (map cdr
      (filter

#(display (av-btn '(0 1 0)))

--
View this message in context: http://lilypond-french-users.1298960.n2.nabble.com/lilypond-scheme-sandbox-tp7579856p7579869.html
Sent from the LilyPond French Users mailing list archive at Nabble.com.

---

From: Daniel Cartron <[email-masked]>
Date: Fri, 31 May 2013 12:20:33 +0200

> Essaye avec ça dans un fichier lilypond:

nom d'un chien, qu'est-ce que c'est pratique... C'est dans la doc ça ? Si oui 
je suis un nul de pas avoir vu, sinon il faut impérativement (amha) le mettre.

En tout cas merci, comme ça en plus je peux mélanger la musique et le code 
dans un fichier test, je me demandais comment faire ça, tu as répondu plus 
vite que ton ombre ;-)

Comme maintenant il faut que je choisisse parmi les deux valeurs de retour 
selon soit le premier nombre soit le second je pense que je vais pouvoir 
refaire la mm manipe, filtrer sur cette valeur, puis à coup de car et cdr 
extraire mes valeurs pour fabriquer mon markup.

Merci et bon app !

-- 
Cordialement, Daniel Cartron
« L'amour est aveugle et sa canne est rose. »
Serge Gainsbourg

---

From: elmamyra <[email-masked]>
Date: Fri, 31 May 2013 04:14:53 -0700 (PDT)

Daniel Cartron-2 wrote
> je suis un nul de pas avoir vu, sinon il faut impérativement (amha) le

Je ne sais pas si c'est dans la doc de lilypond, mais "display" est une
fonction standard de scheme, c'est donc présent dans la doc de guile.

--
View this message in context: http://lilypond-french-users.1298960.n2.nabble.com/lilypond-scheme-sandbox-tp7579856p7579871.html
Sent from the LilyPond French Users mailing list archive at Nabble.com.

---

From: Daniel Cartron <[email-masked]>
Date: Fri, 31 May 2013 13:22:12 +0200

> fonction standard de scheme, c'est donc présent dans la doc de guile.

oui et ça je m'en servais déjà dans le bac à sable, ce dont je parlais c'est 
le fait de se servir d'un fichier ly comme bac à sable qui devrait être 
indiqué.

Au fait étant donné que la liste sur laquelle je recherche est issue de

$(define (pitch->list pitch)
   (list (ly:pitch-notename pitch)
         (ly:pitch-octave pitch)
         (ly:pitch-alteration pitch)
   )
)

(que je n'ai pas encore pris le temps de tester d'aillerurs) on pourrait pas 
tout coupler ou il vaut mieux procéder en deux étapes ?

-- 
Cordialement, Daniel Cartron
« Une bonne citation placée au bon endroit et au bon moment peut, pour un 
instant, faire paraître le pire des imbéciles beaucoup plus intelligent qu'il 
ne l'est en réalité. »
Martin Roy

---

From: Daniel Cartron <[email-masked]>
Date: Fri, 31 May 2013 14:40:25 +0200

> Essaye avec ça dans un fichier lilypond:

si j'essaye ça :

#(define cte
 '(
  ( (4 0 0) . (1 1 2) )
  ( (6 0 0) . (2 1 2) )
  ( (0 1 0) . (1 1 3) )
  ( (0 1 0) . (2 1 3) )
 )
)

#(define kdb cte)
#(define (av-btn ref)
    (map cdr
      (filter

ça marche plus... Dans le bac à sable non plus d'ailleurs alors qu'hier j'y 
arrivais... Plus j'avance et plus je patauge...

pourtant l'affichage de cte et kbd donne le mm résultat, mais il ne veut pas 
que j'affecte un nouveau contenu à kbd. Histoire d'ordre des instruction ? 
J'ai testé plusieurs manières, tjs pareil. Et j'ai impérativement besoin de 
pouvoir débrancher kbd vers qq chose d'autre défini au préalable.

-- 
Cordialement, Daniel Cartron
« Il était si laid que lorsqu'il faisait des grimaces, il l'était moins. »
Jules Renard

---

From: elmamyra <[email-masked]>
Date: Fri, 31 May 2013 11:46:38 -0700 (PDT)

Daniel Cartron-2 wrote
> #(define cte

Chez moi ça fonctionne.

Daniel Cartron-2 wrote
> pouvoir débrancher kbd vers qq chose d'autre défini au préalable.

Ce n'est pas très clair. Qu'appelles tu débrancher?

Quand tu fais "#(define kdb cte)", kdb et cte sont alors identique, c'est à
dire que si tu modifies kdb, cte est aussi modifié et inversement. Je ne
sais si c'est ce que tu cherches mais si tu veux copier le contenu d'une
liste dans une autre tu peux utiliser la procédure "list-copy".

Tout ça me paraît bien compliqué. Quelle est le but final?

--
View this message in context: http://lilypond-french-users.1298960.n2.nabble.com/lilypond-scheme-sandbox-tp7579856p7579879.html
Sent from the LilyPond French Users mailing list archive at Nabble.com.