(define-struct jeu-vidéo [nom prix])
(define-struct sport [nom effectif prix-équipement])
(define-struct musée [nom prix])
; une activité est soit:
; - un jeu vidéo
; - un sport collectif (effectif: le nombre de participants pour une partie)
; - une visite de musée
; - #false (une personne qui ne fait rien)
Pour chacune des fonctions ci-dessous, suivre la recette de conception jusqu'au bout -- y compris une implémentation.
; nombre-de-participants: Activité -> Number
; taille-du-groupe: List-of-Activité -> Number
; prix-total: List-of-Activité -> Number
(define-struct jeu-vidéo [nom prix])
(define-struct sport [nom effectif prix-équipement])
(define-struct musée [nom prix])
; une activité est soit:
; - un jeu vidéo
; - un sport collectif
; - une visite de musée
; - #false (une personne ne fait rien)
; nombre-de-participants: Activité -> Number
; taille-du-groupe: List-of-Activités -> Number
; prix-total: List-of-Activité -> Number
(define zelda (make-jeu-vidéo "Zelda" 5))
(define basket (make-sport "Basket" 5 20))
(define orsay (make-musée "Musée d'Orsay" 15))
; nombre-de-participants: Activité -> Number
; le nombre de joueurs nécessaire pour chaque activité
(check-expect (nombre-de-participants zelda) 1)
(check-expect (nombre-de-participants basket) 5)
(check-expect (nombre-de-participants orsay) 1)
(check-expect (nombre-de-participants #false) 1)
(define (nombre-de-participants acti)
(cond
[(jeu-vidéo? acti) 1]
[(sport? acti) (sport-effectif acti)]
[(musée? acti) 1]
[(false? acti) 1]))
; taille-du-groupe: List-of-Activités -> Number
; le nombre de joueurs nécessaires pour pratiquer toutes ces activités en parallèle
(check-expect (taille-du-groupe (cons zelda (cons basket '()))) 6)
(define (taille-du-groupe actis)
(cond
[(empty? actis) 0]
[(cons? actis) (+ (nombre-de-participants (first actis)) (taille-du-groupe (rest actis)))]))
; prix-activité: Activité -> Number
; prix de l'activité pour une personne
(check-expect (prix-activité zelda) 5)
(check-expect (prix-activité orsay) 15)
(check-expect (prix-activité basket) 20)
(check-expect (prix-activité #false) 0)
(define (prix-activité acti)
(cond
[(jeu-vidéo? acti) (jeu-vidéo-prix acti)]
[(sport? acti) (sport-prix-équipement acti)]
[(musée? acti) (musée-prix acti)]
[(false? acti) 0]))
; prix-total: List-of-Activités -> Number
; prix total de l'activité pour tous les joueurs
(check-expect (prix-total (cons zelda (cons basket '()))) 105)
(define (prix-total li)
(cond
[(empty? li) 0]
[(cons? li) (+ (prix-total (rest li))
(* (prix-activité (first li)) (nombre-de-participants (first li))))]))
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)
(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?
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"]))