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
à 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 ?
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)
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
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-liste (cons (make-objet) la-liste))
que devient l'objet créé lors de l'ajout, au moment ou je le retire de la liste ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 (set! la-list (cdr 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 !
Partager