2. Les Fonctions
1 Exercice 2.7.1
2 Exercice 2.7.2
3 Exercice 2.7.3
4 Exercice 2.7.4
5 Exercice 2.7.5
6 Exercice 2.7.6
7 Exercice 2.7.7
8 Exercice 2.6.8
9 Exercice 2.7.9
10 Exercice 2.7.10
6.0.1.11

2. Les Fonctions

1 Exercice 2.7.1

a) correct
b) p ne doit être calculé qu’une seule fois !
c) define permet de définir une fonction, qui travaille en ordre applicatif [ou appel par valeur], ce qui signifie que les arguments sont évalués avant que le corps de la fonction ne soit lui-même évalué !

2 Exercice 2.7.2

a) et b) Attention : (random n) tombe dans [0,n-1] et non dans [0,n].
c) Il suffit de lancer un dé à 3 faces et de convertir le résultat 0,1,2 en 0,1,1.
d) On jette un dé à 7 faces UNE SEULE FOIS et on convertit 0,1,2,3,4,5,6 en 0,1,1,3,3,3,3.
e) La documentation en ligne de random précise quel est le plus grand entier aléatoire possible.

3 Exercice 2.7.3

Par exemple :

(define (une-racine a b c)

  (if (= a 0)

      (error 'une-racine "Le trinome n'est pas du second degré !")

      (local [(define d (delta a b c))]

        (/ (+ (- b) (sqrt d)) (* 2 a)))))

 

(define (diviseur? d n)   ; d et n entiers

  (and (not (= d 0)) (= 0 (modulo n d))))

4 Exercice 2.7.4

(define (f x)

  (local [(define u (sqr x))

          (define s (sin u))]

    (/ s (+ (sqr u) s))))

5 Exercice 2.7.5

(define (s t)

  (cond ((< t -3) 0)

        ((<= t -1) 1)   ; ici je suis sûr que t >= -3

        ...

        (else 0)))

6 Exercice 2.7.6

(define (tranche s bas haut p)

  (cond ((< s bas) 0)                    ; en-dehors de la tranche

        ((<= s haut) (* (- s bas) (/ p 100)))   ; dans la tranche

        (else ...)))                            ; toute la tranche

7 Exercice 2.7.7

Le résultat de (deriv f) est une fonction, pas un nombre. Et le constructeur de fonction est lambda. Donc :

(define (deriv f)

  (lambda (x)

    ...))

8 Exercice 2.6.8

La rotation de centre z0 et d’angle a est la transformation complexe d’équation :

z’ - z0 = (z - z0) eia


d’où :

(define (rotation z0 a)    ; Complex x Real -> (Complex -> Complex)

  (lambda (z)

    (+ z0 (* (- z z0) (exp (* +i a))))))

N’oubliez pas que le nombre complexe i des maths s’écrit +i en Scheme pour ne pas le confondre avec une variable i...

9 Exercice 2.7.9

Encore une fois, c’est lambda qui construit dynamiquement une fonction !

(define (compose f g)     ; f et g sont deux fonctions à une seule variable !

  (lambda (x)

    (f (g x))))

10 Exercice 2.7.10

Le constructeur couple est de type : Expr x Expr -> (Boolean -> Expr)Expr dénote une expression de type quelconque. Un "couple" c est donc une fonction ! Il vous suffit de trouver le bon argument à passer à cette fonction pour extraire l’une des deux "composantes" du couple c...