• Aucun résultat trouvé

Cours No 9 : S´ equences et Effets de bord en programmation r´ ecursive.

N/A
N/A
Protected

Academic year: 2022

Partager "Cours No 9 : S´ equences et Effets de bord en programmation r´ ecursive."

Copied!
3
0
0

Texte intégral

(1)

Universit´e Montpellier-II

UFR des Sciences - D´epartement Informatique - Licence Informatique Programmation Applicative et R´ecursive

Cours No 9 : S´ equences et Effets de bord en programmation r´ ecursive.

Notes de cours Christophe Dony

17 D´ efinitions

Effet de bord: modification explicite de l’´etat de l’ordinateur (de la m´emoire ou de l’affichage).

S´equence : suite d’instructions.

Une instruction effectuant un calcul sans rendre explicitement une valeur effectue un effet de bord.

Fonction r´ecursive avec effet de bord :

1 (define(display-elements l)

2 (if (not(null?l))

3 (begin

4 (display (carl));; effet de bord

5 (display ‘‘‘‘);; effet de bord

6 (display-elements (cdr l)))))

Exemple : Affichage en profondeur d’abord des donn´ees contenues dans un arbre binaire.

1 (define(affichage a)

2 (or (arbre-vide? a)

3 (begin(affichage(fg a))

4 (display (val-noeud a))

5 (affichage (fd a)))))

Dessins R´ecursifs

1 (define(feuille long angle)

2 (if (> long1)

3 (begin

4 (draw(/long 2))

5 (turn(−angle))

6 (feuille(/long 2)angle)

7 (turn(∗angle 2))

8 (feuille(/long 2)angle)

9 (turn(−angle))

10 (draw(/long 2))

11 (turn(−angle))

12 (feuille(/long 2)angle)

1

(2)

13 (turn angle)

14 ;(feuille (/ long 2) angle)

15 (turn angle)

16 (feuille(/long 2)angle)

17 (turn(−angle))

18 (move(−long)))))

20 (define(naperon long angle)

21 (let ((n(/ 360angle)))

22 (define(boucle long angle times)

23 (if (>times0)

24 (begin

25 (feuille long angle)

26 (turn angle)

27 (boucle long angle(−times1)))))

29 (boucle long angle n)))

31 (turtles)

32 (turn 90)

33 (naperon200 60)

17.1 Modification physique de la m´emoire

Les proc´edures set-car ! et set-cdr ! La fonction append destructrice.

1 (define(d-append l1 l2)

2 (cond ((null?l1)l2)

3 ((null?(cdrl1)) (set-cdr! l1 l2) l1)

4 (#t(d-append(cdrl1)l2))))

6 (definematin(list 1 2 3 4 5 6 7 8 9 10 11 12))

7 (definesoir (list 13 14 15 16 17 18 19 20 21 22 23 24))

8 (defineheures(appendmatin soir))

Les listes circulaires.

1 (d-append heures heures)

17.1.1 Un arbre binaire imp´eratif

A jout de nouvelles fonctions d’interface pour pouvoir modifier le fils gauche et le fils droit.

(define (set-fg ! a a2) (set-car ! (cdr a) a2)) (define (set-fd ! a a2) (set-car ! (cddr a) a2))

1 (define(p-insere n a)

2

(3)

2 ;; version n’acceptant pas les insertions successives

3 (display a) (display n) (display "\n")

4 (if (arbre-vide? a)

5 (make-feuille n))

6 (let((valeur(val-noeud a)))

7 (cond((<n valeur)

8 (if (arbre-vide?(fg a))

9 (set-fg! a(make-feuille n))

10 (p-insere n(fg a))))

11 ((>n valeur)

12 (if (arbre-vide?(fd a))

13 (set-fd! a(make-feuille n))

14 (p-insere n(fd a))))

15 ((= n valeur) a))))

1 (definel2(make-feuille5))

2 (p-insere4 l2)

3 (p-insere7 l2)

4 (p-insere8 l2)

5 (p-insere1 l2)

6 (p-insere2 l2)

Exercice : Une version de la fonction p-insere qui autorise l’´ecriture de (set ! l (insere 2 (insere 1 (insere 8 (insere 7 (insere 4 l))))))

3

Références

Documents relatifs

On peut ´ecrire une deuxi`eme fonction qui appelle la premi`ere et renvoie l’indice de la premi`ere occurence de l’´el´ement recherch´e s’il est pr´esent dans le tableau ou

Les fonctions lapply et sapply calculent la même fonction sur tous les éléments d’un vecteur ou d’une liste. lapply(X,FUN, ARG.COMMUN) permet d’appliquer la fonction FUN à tous

Il est ` a noter que le tableau B partiellement rempli et que les valeurs ins´ er´ ees sont rang´ ees.Pour cette deuxi` eme proc´ edure, B est toujours une variable globale, cleB

la plupart des chiers d'aide sont bien documentés ; accès direct à la che d'aide avec la fonction help() ;. recherche de chiers d'aide par titre ou mot-clé avec la

na.strings Vecteur de chaînes de caractères indiquant les valeurs manquantes (NA par défaut) colClasses Vecteur de caractères indiquant les modes des colonnes (R fait au mieux

Pour rendre accessible dans l'environnement global une variable créée dans le corps d'une fonction, on peut utiliser le symbole &lt;&lt;- ;. La fonction assign() est plus

Créer une liste de longueur 5 dans laquelle chaque élément doit être composé d'un échantillon d'observations issues d'une loi Normale centrée réduite ;. Sur chaque

&gt; AAA[c(3,5,3)] # Donne le troisième, le cinquième puis le troisième éléments de AAA Une matrice est un tableau constitué de plusieurs objets unitaires, tous du même