1. Les Expressions Préfixées
1 Exercice 1.9.1
2 Exercice 1.9.2
3 Exercice 1.9.3
4 Exercice 1.9.4
5 Exercice 1.9.5
6 Exercice 1.9.6
6.0.1.11

1. Les Expressions Préfixées

1 Exercice 1.9.1

a) L’Art Subtil des Parenthèses...

(* 2 pi (sqrt (/ L g))

(+ (- b a) 1)    ou    (+ b (- a) 1)

(exp (* +i pi 1/3))

(* 4/3 pi R R R)

b) et sa réciproque :

formule

2 Exercice 1.9.2

Pour calculer une racine cubique, on élève à la puissance 1/3. Donc la racine cublique de 10 se note en Scheme :

(expt 10 1/3)

Le logarithme en base a est défini mathématiquement par la formule loga(x)=log(x)/log(a)log est le logarithme népérien. Donc le log de 10 en base 2 s’écrira :

(/ (log 10) (log 2))

L’arc cosinus s’obtient par la fonction acos, qui travaille en radians. Une règle de trois permet d’obtenir une conversion en degrés. Donc si un angle a pour cosinus 0.746, l’angle en question a pour mesure :

> (define a (acos 0.746))

> a

#i0.7287611225998648           ; environ 0.7 radians

> (define radian (/ 180 pi))

> (* a radian)

#i41.75493659818821            ; environ 42 degrés

Le module d’un nombre complexe s’obtient avec magnitude et son angle polaire avec angle. Donc :

> (magnitude 3-2i)             ; le module

#i3.6055512754639896

> (angle 3-2i)                 ; l'angle en radians

#i-0.5880026035475675

> (* (angle 3-2i) radian)      ; l'angle en degrés

#i-33.690067525979785

Ecriture en base 2 (le binaire) ou 16 (l’hexadécimal, brrr) :

> (string->number "11010110" 2)

214

> (number->string 15722 16)

"3d6a"

La divisibilité de a par b se teste par la fonction modulo, on évitera de demander si le quotient est entier. On peut aussi observer la simplification automatique de a/b.

> 998811/177                   ; yes

5643

> (= (modulo 998811 177) 0)    ; yes

#t

3 Exercice 1.9.3

Pour définir la constante $pi, demandez-vous ce que vaut (cos pi). Pour la constante $e, utilisez la fonction exponentielle. Je note $pi ma variable, pour ne pas tuer le pi prédéfini de Scheme...

> (define $pi (acos -1))

> $pi

#i3.141592653589793

> (define $e (exp 1))

> $e

#i2.718281828459045

4 Exercice 1.9.4

> (string-length (number->string (expt 2021 150)))    ; ouf

496

b) Pour exprimer que n contient k chiffres, on l’encadre sous la forme 10k-1 <= n < 10k. On prend ensuite le logarithme de cette inéquation, qui montre que la partie entière de log(n)/log(10) n’est autre que k-1. Donc :

(define (nb-chiffres n)        ; n entier > 0

  (+ (inexact->exact (floor (/ (log n) (log 10)))) 1))

 

> (nb-chiffres (expt 2021 150))

496

5 Exercice 1.9.5

Bien voir que and et or ne sont définitivement PAS des fonctions !!!

6 Exercice 1.9.6

Utilisez des équivalences de la forme (and p q) <==> (if p q #f).