je m'y remets, définition de fonction locale [Scheme] - Divers - Programmation
Marsh Posté le 19-09-2003 à 22:30:30
ben il manque un define dans la def de ta fonction aux.
Marsh Posté le 19-09-2003 à 22:31:05
(define minimum (lambda (liste) |
Je précise que ca fait 4 ans que j'en ai pas fait, donc patapai.
Marsh Posté le 19-09-2003 à 22:34:43
J'ai dit une grosse connerie, essaie avec ca :
Code :
|
Bon par contre je garantis pas le nb de parenthèse, chuis pas bien ce soir
http://gd.tuwien.ac.at/languages/O [...] node57.htm
Vla un lien sympa sur let, et comme let est evalué comme un bete (define (lambda ... il ne peut etre utilisé pour la def de fonctions.
Marsh Posté le 19-09-2003 à 22:39:19
non, les définitions ne peuvent être faites qu'au niveau le plus haut
Marsh Posté le 19-09-2003 à 22:42:39
Taz a écrit : non, les définitions ne peuvent être faites qu'au niveau le plus haut |
C pas ce qu'en dit ce lien :
Solution de l'exercice 10 : Ceci est le premier exemple d'une sous-fonction définie localement.
Citation : |
Il me semblait que je l'avais fait une paire de fois...
Enfin j'essaie de t'aider avec de vieux souvenirs
PS : source : http://www-spi.lip6.fr/~queinnec/T [...] es003.html
PS2 : au cas ou ( mais je pense que tu sais), (define (fct a b) ... ) est equivalent a (define fct (lambda (a b) ...)
Marsh Posté le 19-09-2003 à 22:49:55
ah ben ouais, autant pour moi, j'ai pas fait gaffe, je bossais avec drScheme, pour me remettre en jambe, je suis repassé avec guile et ça roule. merci
Marsh Posté le 19-09-2003 à 22:53:33
une idée sur comment faire un nombre variable d'arguments ?
comme min par exemple ?
Marsh Posté le 19-09-2003 à 22:57:11
La je sais vraiment pas, mais pour ca, personellement je passerais une liste avec tous les arguments pour y arriver.
Comme le traitement doit etre récursif de toute manière quelque part...
Marsh Posté le 19-09-2003 à 23:02:10
ben scheme implémente ca de facon simple en fait.
un exemple con :
(define (f . Largs)
tu peux appeler f comme min, et Largs contiendra la liste de tous les paramètres de f ( je pense).
Tu peux forcer par exemple au minimum deux arguments en faisant :
(define (f x y . Largs)
etc.
Pense a utilise la fonction APPLY aussi, ca devrait te faciliter les choses pour ca.
Marsh Posté le 19-09-2003 à 23:09:04
c'est bizarre, j'arrive pas à faire des define locaux avec des lambda, je dois être un tâchon
Marsh Posté le 19-09-2003 à 23:12:59
Taz a écrit : c'est bizarre, j'arrive pas à faire des define locaux avec des lambda, je dois être un tâchon |
Essaie ca :
Code :
|
ca marche ?
Marsh Posté le 19-09-2003 à 23:20:27
Ben je sais vraiment pas alors.
Essaie sans lambda, bien que cela m'étonne.
Désolé de pas pouvoir t'aider plus
Marsh Posté le 19-09-2003 à 23:22:11
non, tu m'as bien aider merci. en fait commes les deux notations existent, il doit quand meme y avoir une différence, je vais mailer mon prof pour savoir. ça m'a permis de m'en sortir.
Marsh Posté le 19-09-2003 à 23:39:42
Ben de rien, hésite pas, même si le scheme ca remonte quand même a loin pour moi
Marsh Posté le 20-09-2003 à 16:21:33
c'était pas let, ni let*, mais letrec
(define facteurs-premiers |
après indiana ou lambda, affaire de goût
Marsh Posté le 19-09-2003 à 21:53:50
ça fait 1 an et demi que j'en ai po faire
(define minimum (lambda (liste)
(let* ((aux (lambda (liste min)
(cond ((null? liste) min)
((< (car liste) min) (aux (cdr liste) (car liste)))
(else (aux (cdr liste) min))
)
)))
(aux (cdr liste) (car liste))
)
))
> (minimum `(1 2 3 4 5))
reference to undefined identifier: aux
j'ai fait une erreur, ou ce n'est pas possible ?