IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scheme Discussion :

Questions techniques sur DrScheme


Sujet :

Scheme

  1. #1
    Membre à l'essai
    Homme Profil pro
    Lille
    Inscrit en
    Janvier 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Lille

    Informations forums :
    Inscription : Janvier 2007
    Messages : 17
    Points : 17
    Points
    17
    Par défaut Questions techniques sur DrScheme
    Bonjour à tous et à toutes,

    J'ai quelques questions sur la façon dont drScheme fonctionne :

    Pour commencer une relativement simple ; lors de l'appel d'une fonction purement itérative, par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    (define (iter val i)
                    (if (equal? val i)
                        (display "fin iter")
                        (iter val (+ i 1))))
    (iter 3 0)
    à chaque fois que iter est appelé dans iter, l'environnement courant est-il détruit et un nouveau est crée (avec i = i + 1) ou est ce que ce nouvel environnement vient se mettre "en dessous" du courant ?

    Deuxième question, cette fois au sujet des objets. Imaginons que j'ai une liste d'objets, et que je rajoute un élément à la liste de cette manière

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    (set! la-liste (cons (make-objet) la-liste))
    imaginons qu'en suite je retire ce nouvel élément de cette façon

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    (set! la-list (cdr la-liste))
    que devient l'objet créé lors de l'ajout, au moment ou je le retire de la liste ?
    Est-il détruit automatiquement ou est ce qu'il est toujours en mémoire, mais inaccessible ?

    Enfin, j'ai tendance :
    - à utiliser des "let" lorsque je calcul qqchose dont j'aurais besoin plus d'une fois dans mon code
    - à définir dans des fonctions, par nature itératives (prenant un paramètre qui ne change pas), une fonction qui elle sera réellement itérative qui ne prend pas ce paramètre constant

    Ai-je raison de faire ainsi ? (dans les 2 cas j'ai vraiment envi de dire oui!)

    exemple pour les 2

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    ;;usage de let, au lieu de recalculer à chaque fois "new-val"
    
    (let ((new-val (+ (get-val) 1)))
              ...
             (fct1 new-val)
              ...
             (fct2 new-val)
              ...)
    
    ;; je reprend l'exemple de la fonction itérative défini plus haut, que je modifie ;;de cette façon
    
    (define (iter val i)
       (define (vrai-iter i)
           (if (equal? val i)
               (display "iter fini")
               (vrai-iter (+ i 1))))
       (vrai-iter i))
    
    (iter 3 0)

    Merci d'avance pour vos réponses !

  2. #2
    Inactif  
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 958
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 958
    Points : 2 467
    Points
    2 467
    Par défaut
    Bon alors, je vais essayer d'être clair sur le comportement du Scheme de PLT. N'hésites pas à me redemander. J'espère que tu ne me balances pas des questions de cours. Tu risques sinon de voir ton prof lire ça de toute façon

    En premier lieu, la fonction récursive que tu as écrite est tail-recursive. Par conséquent, elle est transformée en un processus itératif. La liaison lexicale est donc « remplacée » en quelque sorte. Mais les environnements ne sont pas détruits. Du moins pas à ce moment là. C'est le GC qui s'occupe de voir si ces environnements sont utilisés et qui les élimine de la mémoire si nécessaire. Donc on peut avoir l'impression qu'ils sont écrasés aussitôt dans l'exemple que tu donnes. Mais ce n'est pas 100% exact.

    La réponse a ta deuxième question est similaire. Comme dans tout langage avec GC, les objets ne sont pas détruits instantanément.

    Finalement, le let est une bonne chose effectivement. Par contre, ta transformation s'avère à peu près inutile. Puisque le processus devient itératif, tu consommes le même espace mémoire. Certes il y a le très léger gain de l'affectation. Mais ce n'est pas ainsi qu'on gagne de la performance

  3. #3
    Membre à l'essai
    Homme Profil pro
    Lille
    Inscrit en
    Janvier 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Lille

    Informations forums :
    Inscription : Janvier 2007
    Messages : 17
    Points : 17
    Points
    17
    Par défaut merci !
    En faite je dois défendre un projet que j'ai fait, donc un grand merci pour toutes ces info !

  4. #4
    Inactif  
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 958
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 958
    Points : 2 467
    Points
    2 467
    Par défaut
    Citation Envoyé par bcaro Voir le message
    En faite je dois défendre un projet que j'ai fait, donc un grand merci pour toutes ces info !
    Ça fait plaisir.

  5. #5
    Candidat au Club
    Femme Profil pro
    Inscrit en
    Avril 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Gabon

    Informations forums :
    Inscription : Avril 2013
    Messages : 2
    Points : 4
    Points
    4
    Par défaut Besoin d'aide
    Voilà j'ai un DM en Scheme et je ne comprends rien à ce language, étant dans une communauté d'informaticien est ce que quelqu'un pourrait m'aider à résoudre mon problème ?
    Voici les chaines prédéfinies avec lesquelles je dois m'aider ezt j'ai joins les consignes. Je suis bloquée pour tout l'exercice 3. Merci d'avance

    (define (lireChaine)
    ; renvoie un mot saisi au clavier sans " et sans espace
    ; -> chaine
    (symbol->string(read)))


    (define (premier chaine)
    ; renvoie le premier caractère d'une chaine saisie au clavier
    ; chaine non vide -> char
    (string-ref chaine 0 ))

    (define ( dernier ch)
    ; renvoie le dernier caractere d'une chaine
    ; chaine non vide -> char
    (string-ref ch (-(string-length ch)1)))

    (define (debut ch )
    ; renvoie la chaine de caractere sans le dernier caractere
    ; chaine non vide -> string
    ( substring ch 0 (- (string-length ch)1 )))

    (define ( fin ch )
    ; renvoie une chaine sans son premier caractere
    ; chaine non vide -> string
    (substring ch 1))

    (define (carChaine c ch)
    ; renvoie la chaine avec un caractère suplémentaire devant
    ; string, caractere -> string non vide
    (string-append (string c) ch))

    (define (chaineCar ch c)
    ; renvoie la chaine avec un caractère suplémentaire à la fin
    ; string, caractere -> string non vide
    (string-append ch (string c)))
    Images attachées Images attachées

  6. #6
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 101
    Points : 5 849
    Points
    5 849
    Par défaut
    Bonjour,
    Il vaut mieux créer une nouvelle discussion plutôt que de continuer sur une discussion marquée comme "résolue" (à partir de ce forum scheme, cliquer sur le bouton nouvelle discussion juste au-dessus du bandeau "Discussions dans le forum : Scheme")

    Le DM est-il vraiment à rendre avant le 19 avril???
    Combien paies-tu pour qu'on fasse le DM à ta place?

    Sinon tu peux obtenir de l'aide ici si tu montres ce que tu as fait, même et surtout si ça ne marche pas complétement!
    Donc: qu'as-tu fait et sur quoi bloques-tu et pourquoi?

    PS: N'oublie pas la devise de Sherlock Holmes: lorsque l'impossible a été éliminé, le reste, aussi invraisemblable soit-il, doit être la solution...

    How often have I said to you that when you have eliminated the impossible, whatever remains, however improbable, must be the truth?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Question technique sur l'indemité de stage.
    Par Toncelan dans le forum Paie
    Réponses: 9
    Dernier message: 24/11/2008, 17h24
  2. Question technique sur les listes déroulantes
    Par kenny49 dans le forum Langage
    Réponses: 3
    Dernier message: 18/04/2007, 11h41
  3. débutant : question technique sur transtypage
    Par flamant dans le forum C++
    Réponses: 9
    Dernier message: 22/01/2007, 12h32
  4. Question technique sur Source Engine
    Par Reyem dans le forum Moteurs 3D
    Réponses: 15
    Dernier message: 20/10/2006, 17h00
  5. Question techniques sur les extents
    Par lecharcutierdelinux dans le forum Oracle
    Réponses: 16
    Dernier message: 24/08/2006, 10h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo