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:
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:
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:
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:
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 !