Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2540 connectés 

  FORUM HardWare.fr
  Programmation
  Divers

  [Scheme] je m'y remets, définition de fonction locale

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Scheme] je m'y remets, définition de fonction locale

n°518559
Taz
bisounours-codeur
Posté le 19-09-2003 à 21:53:50  profilanswer
 

ç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 ?

mood
Publicité
Posté le 19-09-2003 à 21:53:50  profilanswer
 

n°518579
Tetedeienc​h
Head Of God
Posté le 19-09-2003 à 22:30:30  profilanswer
 

ben il manque un define dans la def de ta fonction aux.
 


---------------
L'ingénieur chipset nortiaux : Une iFricandelle svp ! "Spa du pâté, hin!" ©®Janfynette | "La plus grosse collec vivante de bans abusifs sur pattes" | OCCT v12 OUT !
n°518581
Tetedeienc​h
Head Of God
Posté le 19-09-2003 à 22:31:05  profilanswer
 

(define minimum (lambda (liste)
              (let* ((define 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))
                )
              ))


Je précise que ca fait 4 ans que j'en ai pas fait, donc patapai.


---------------
L'ingénieur chipset nortiaux : Une iFricandelle svp ! "Spa du pâté, hin!" ©®Janfynette | "La plus grosse collec vivante de bans abusifs sur pattes" | OCCT v12 OUT !
n°518585
Tetedeienc​h
Head Of God
Posté le 19-09-2003 à 22:34:43  profilanswer
 

J'ai dit une grosse connerie, essaie avec ca :

Code :
  1. (define minimum (lambda (liste)
  2.               ((define aux (lambda (liste min)
  3.                                   (cond ((null? liste) min)
  4.                                         ((< (car liste) min) (aux (cdr liste) (car liste)))
  5.                                         (else (aux (cdr liste) min))
  6.                                         )
  7.                                   ))
  8.                 (aux (cdr liste) (car liste))
  9.                 )
  10.               ))


 
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.


Message édité par Tetedeiench le 19-09-2003 à 22:36:32

---------------
L'ingénieur chipset nortiaux : Une iFricandelle svp ! "Spa du pâté, hin!" ©®Janfynette | "La plus grosse collec vivante de bans abusifs sur pattes" | OCCT v12 OUT !
n°518588
Taz
bisounours-codeur
Posté le 19-09-2003 à 22:39:19  profilanswer
 

non, les définitions ne peuvent être faites qu'au niveau le plus haut

n°518591
Tetedeienc​h
Head Of God
Posté le 19-09-2003 à 22:42:39  profilanswer
 

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 :


;;; Premier exemple de sous-fonction locale.
(define (facteurs-premiers n)
  (define (fp n essai)
    (if (> n 1)
        (if (= 0 (remainder n essai))
            (cons essai (fp (quotient n essai) essai))
            (fp n (+ 1 essai)) )
        '() ) )
  (if (= n 1) (list 1) (fp n 2)) )


 
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) ...)


Message édité par Tetedeiench le 19-09-2003 à 22:43:05

---------------
L'ingénieur chipset nortiaux : Une iFricandelle svp ! "Spa du pâté, hin!" ©®Janfynette | "La plus grosse collec vivante de bans abusifs sur pattes" | OCCT v12 OUT !
n°518599
Taz
bisounours-codeur
Posté le 19-09-2003 à 22:49:55  profilanswer
 

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

n°518602
Taz
bisounours-codeur
Posté le 19-09-2003 à 22:53:33  profilanswer
 

une idée sur comment faire un nombre variable d'arguments ?
comme min par exemple ?

n°518607
Tetedeienc​h
Head Of God
Posté le 19-09-2003 à 22:57:11  profilanswer
 

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...


---------------
L'ingénieur chipset nortiaux : Une iFricandelle svp ! "Spa du pâté, hin!" ©®Janfynette | "La plus grosse collec vivante de bans abusifs sur pattes" | OCCT v12 OUT !
n°518612
Tetedeienc​h
Head Of God
Posté le 19-09-2003 à 23:02:10  profilanswer
 

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.


Message édité par Tetedeiench le 19-09-2003 à 23:02:42

---------------
L'ingénieur chipset nortiaux : Une iFricandelle svp ! "Spa du pâté, hin!" ©®Janfynette | "La plus grosse collec vivante de bans abusifs sur pattes" | OCCT v12 OUT !
mood
Publicité
Posté le 19-09-2003 à 23:02:10  profilanswer
 

n°518613
Taz
bisounours-codeur
Posté le 19-09-2003 à 23:09:04  profilanswer
 

c'est bizarre, j'arrive pas à faire des define locaux avec des lambda, je dois être un tâchon

n°518617
Tetedeienc​h
Head Of God
Posté le 19-09-2003 à 23:12:59  profilanswer
 

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 :
  1. (define facteurs-premiers
  2. (lambda (n)
  3. (define fp
  4.   (lambda( n essai)
  5.    (if (> n 1)
  6.        (if (= 0 (remainder n essai))
  7.            (cons essai (fp (quotient n essai) essai))
  8.            (fp n (+ 1 essai)) )
  9.        '() ) )
  10. (if (= n 1) (list 1) (fp n 2)) )


 
ca marche ?


Message édité par Tetedeiench le 19-09-2003 à 23:13:21

---------------
L'ingénieur chipset nortiaux : Une iFricandelle svp ! "Spa du pâté, hin!" ©®Janfynette | "La plus grosse collec vivante de bans abusifs sur pattes" | OCCT v12 OUT !
n°518620
Taz
bisounours-codeur
Posté le 19-09-2003 à 23:15:28  profilanswer
 

non, j'ai fait la meme chose que toi

n°518625
Tetedeienc​h
Head Of God
Posté le 19-09-2003 à 23:20:27  profilanswer
 

Ben je sais vraiment pas alors.
 
Essaie sans lambda, bien que cela m'étonne.
 
Désolé de pas pouvoir t'aider plus :(


---------------
L'ingénieur chipset nortiaux : Une iFricandelle svp ! "Spa du pâté, hin!" ©®Janfynette | "La plus grosse collec vivante de bans abusifs sur pattes" | OCCT v12 OUT !
n°518628
Taz
bisounours-codeur
Posté le 19-09-2003 à 23:22:11  profilanswer
 

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.  :jap:

n°518643
Tetedeienc​h
Head Of God
Posté le 19-09-2003 à 23:39:42  profilanswer
 

Ben de rien, hésite pas, même si le scheme ca remonte quand même a loin pour moi :hello:


---------------
L'ingénieur chipset nortiaux : Une iFricandelle svp ! "Spa du pâté, hin!" ©®Janfynette | "La plus grosse collec vivante de bans abusifs sur pattes" | OCCT v12 OUT !
n°518644
Taz
bisounours-codeur
Posté le 19-09-2003 à 23:40:06  profilanswer
 

ok

n°518887
Taz
bisounours-codeur
Posté le 20-09-2003 à 16:21:33  profilanswer
 

c'était pas let, ni let*, mais letrec  :)  :wahoo:  
 

(define facteurs-premiers
  (lambda (n)
    (letrec ((fp (lambda (n essai)
     (if (> n 1)
         (if (= 0 (remainder n essai))
      (cons essai (fp (quotient n essai) essai))
      (fp n (+ 1 essai)) )
         '() ) )
   ))
       
      (if (= n 1) (list 1) (fp n 2)) )
    )
  )


 
après indiana ou lambda, affaire de goût  :)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Divers

  [Scheme] je m'y remets, définition de fonction locale

 

Sujets relatifs
renvoi vers une page en fonction du formulaireFonction like de php en VBA ??
fonction mail et OVH marche plus [résolu]Une fonction CallBack
[PHP & MYSQL] Utiliser une fonction PHP dans un LONGTEXT MySQL ![mysql] fonction OPTIMIZE
Langage et définition de règlestableau de pointeur sur fonction !!!
la fonction systemfonction membres et template .template
Plus de sujets relatifs à : [Scheme] je m'y remets, définition de fonction locale


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR