Implémenter la fonction suivante:
; different-first-and-second-letter? : String -> Bool
; are the first and second letter of the input different?
(check-expect (different-first-and-second-letter? "yacine") #true)
(check-expect (different-first-and-second-letter? "lloris") #false)
; different-first-and-second-letter? : String -> Bool
; are the first and second letter of the input different?
(check-expect (different-first-and-second-letter? "yacine") #true)
(check-expect (different-first-and-second-letter? "lloris") #false)
(define (different-first-and-second-letter? str)
(and (>= (string-length str) 2)
(not (string=? (string-ith str 0) (string-ith str 1)))))
On définit deux structures de formes géométriques avec des couleurs.
; hauteur: Number
; largeur: Number
; couleur: String
(define-struct forme-rectangle [hauteur largeur couleur])
; rayon: Number
; couleur: String
(define-struct forme-cercle [rayon couleur])
On appelle Forme
un valeur qui est soit une forme-rectangle
soit une forme-cercle
:
; A Forme is one of the following:
; - a forme-rectangle
; - a forme-cercle
Vous devez implémenter les deux fonctions suivantes:
; nouvelle-couleur: Forme String -> Forme
; takes a Forme and a color, and returns a modified Forme of that color
(check-expect
(nouvelle-couleur (make-forme-rectangle 10 20 "blue") "red")
(make-forme-rectangle 10 20 "red"))
(check-expect
(nouvelle-couleur (make-forme-cercle 10 "blue") "green")
(make-forme-cercle 10 "green"))
et:
(require 2htdp/image)
; dessine-forme: Forme -> Image
; converts a Forme into an image
(check-expect
(dessine-forme (make-forme-rectangle 10 20 "blue"))
(rectangle 10 20 "solid" "blue"))
(check-expect
(dessine-forme (make-forme-cercle 10 "blue"))
(circle 10 "solid" "blue"))
; hauteur: Number
; largeur: Number
; couleur: String
(define-struct forme-rectangle [hauteur largeur couleur])
; rayon: Number
; couleur: String
(define-struct forme-cercle [rayon couleur])
; A Forme is one of the following:
; - a forme-rectangle
; - a forme-cercle
; nouvelle-couleur: Forme String -> Forme
; takes a Forme and a color, and returns a modified Forme of that color
(check-expect
(nouvelle-couleur (make-forme-rectangle 10 20 "blue") "red")
(make-forme-rectangle 10 20 "red"))
(check-expect
(nouvelle-couleur (make-forme-cercle 10 "blue") "green")
(make-forme-cercle 10 "green"))
(define (nouvelle-couleur forme coul)
(cond
[(forme-rectangle? forme)
(make-forme-rectangle
(forme-rectangle-hauteur forme)
(forme-rectangle-largeur forme)
coul)]
[(forme-cercle? forme)
(make-forme-cercle
(forme-cercle-rayon forme)
coul)]))
(require 2htdp/image)
; dessine-forme: Forme -> Image
; converts a Forme into an image
(check-expect
(dessine-forme (make-forme-rectangle 10 20 "blue"))
(rectangle 10 20 "solid" "blue"))
(check-expect
(dessine-forme (make-forme-cercle 10 "blue"))
(circle 10 "solid" "blue"))
(define (dessine-forme f)
(cond
[(forme-rectangle? f)
(rectangle
(forme-rectangle-hauteur f)
(forme-rectangle-largeur f)
"solid"
(forme-rectangle-couleur f))]
[(forme-cercle? f)
(circle
(forme-cercle-rayon f)
"solid"
(forme-cercle-couleur f)
)]))
; has-strictly-negative?: List Number -> Bool
; has-strictly-positive? checks whether one number in the list
; is strictly negative (< n 0)
(check-expect (has-strictly-negative? (cons 1 '())) #false)
(check-expect (has-strictly-negative? (cons 2 (cons -1 '()))) #true)
; has-strictly-negative?: List Number -> Bool
; has-strictly-positive? checks whether one number in the list
; is strictly negative (< n 0)
(check-expect (has-strictly-negative? (cons 1 '())) #false)
(check-expect (has-strictly-negative? (cons 2 (cons -1 '()))) #true)
(define (has-strictly-negative? list)
(cond
[(empty? list) #false]
[(cons? list)
(or
(< (first list) 0)
(has-strictly-negative? (rest list)))]))
Suivre la recette de conception pour implémenter une fonction premiere-lettre
qui renvoie la première lettre d'un mot.
; le mot sera représenté par String
; premiere-lettre: String -> 1String
; quand on lui donne une chaîne de caractère, on récupère la première lettre
(check-expect (premiere-lettre "bibliothèque") "b")
(define (premiere-lettre mot) (string-ith mot 0))
Expressions:
(opération argument1 argument2 ...)
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 ...) ?)
(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"]))