Listes (exercices avancés)

Définir la fonction duplique qui prend une liste et renvoie chaque élément en double. Par exemple, (duplique (cons 1 (cons "x" '()))) est (cons 1 (cons 1 (cons "x" (cons "x" '())))).

Définir la fonction dernier qui renvoie le dernier élément d'une liste.

Définir la fonction (renverse-dans la lb) qui renverse les éléments de la et les ajoute à lb. Par exemple, (renverse-dans (cons 1 (cons 2 '())) (cons 3 '())) est (cons 2 (cons 1 (cons 3 '()))).

Définir la fonction (renverse li) qui prend une liste et renvoie la liste à l'envers. (renverse (cons 1 (cons 2 '()))) est (cons 2 (cons 1 '())).

Exercice avancé: expressions arithmétiques

On définit une expression arithmétique comme étant soit :

Par exemple, l'expression (2 * (x + 1)) est représentée par la valeur (make-mult 2 (make-plus "x" 1)).

Définir la fonction varie? qui prend une expression arithmétique et indique si elle varie, c'est-à-dire si elle contient la variable "x" (ou bien seulement des constantes).

Définir la fonction (eval n expr) qui évalue l'expression arithmétique expr en donnant à la variable x la valeur n. Par exemple, (eval 3 (make-mult 2 (make-plus "x" 1))) est 8, c'est-à-dire (2 * (3 + 1)).

Définir la fonction derive qui prend une expression arithmétique et renvoie sa dérivée par rapport à la variable x. Rappel:

Rappels

Syntaxe

Expressions:

(opération argument1 argument2 argument3)

Définition et utilisation de variable:

(define nom-de-variable ...)
(define gregory (string-append "bon" " " "jour"))

gregory

Définition et utilisation de fonction:

(define (nom-de-fonction nom-argument1 nom-argument2 nom-argument-3) ...)
(define (square i) (* i i))

(square 5)

Opérations courantes

(if truc machin chouette)

(cond
  [truc bidule]
  [truc machine]
  [else chose])

nombres

+ - * /

images

(require 2htdp/image)
(rectangle 10 20 "solid" "blue")
(circle 100 "solid" "red") square star
above beside
image-width image-height

chaînes de caractères (strings)

string-length string-append string-ith
string->number number->string
string=?

booléens

and or not

prédicats de test

image? number? string? boolean?

structures

(define-struct anim [size decr?])

(make-anim s dir)
(anim-size anim)
(anim-decr? anim)
(anim? x)

listes

'() cons first rest empty? cons?

Recette de conception

  1. Réfléchir au choix de données, l'expliquer si nécessaire.
  2. Donner la signature.
  3. Expliquer ce que fait la fonction.
  4. Donner un ou plusieurs exemples
  5. Code de la fonction

Exemple:

; A TrafficLight is one of the following Strings:
; – "red"
; – "green"
; – "yellow"
; interpretation the three strings represent the three
; possible states that a traffic light may assume

; the state of a traffic light is represented by TrafficLight
; TrafficLight -> TrafficLight
; yields the next state given current state s
(check-expect (traffic-light-next "red") "green")
(define (traffic-light-next s)
  (cond
    [(string=? "red" s) "green"]
    [(string=? "green" s) "yellow"]
    [(string=? "yellow" s) "red"]))