Définir une fonction (and3 a b c)
qui renvoie #true
si tous les booléens a, b, c
sont vrais, et #false
sinon, sans utiliser la fonction and
.
Définir une fonction (max2 a b)
qui prend deux nombres a, b
et renvoie le plus grand, sans utiliser la fonction max
.
Définir une fonction (max3 a b c)
qui prend trois nombres a, b, c
et renvoie le plus grand, sans utiliser la fonction max
.
Définir une structure adresse
avec un champ numéro
, un champ rue
et un champ ville
.
Définir une fonction adresse->string
qui renvoie la représentation textuelle d'une adresse.
Par exemple, si l'adresse est - numéro: 2
- rue: "rue de la Liberté"
- ville: "Saint-Denis"
le résultat attendu est "2 rue de la Liberté, Saint-Denis"
.
Écrire la fonction adresse-suivante
qui renvoie l'adresse suivante de la rue. Avec l'exemple précédent, on attend le numéro 3
, rue "rue de la Liberté"
, ville "Saint-Denis"
.
On définit un nombre-étendu comme soit:
#true
représente "plus l'infini", #false
représente "moins l'infini"Écrire une fonction add
qui prend deux nombres-étendus et les ajoutes:
Par exemple, (add 3 #true)
(ajouter 3 et "plus l'infini") renvoie #true
.
On va définir des types de données pour représenter une suite de commandes envoyées à un petit robot.
On définit un mouvement
comme: - soit le texte "avance"
- soit le texte "recule"
On définit la structure action
, avec les champs dabord
et ensuite
.
On définit le type commande
comme soit: - la chaîne "stop" - une action
dont le champ dabord
vaut soit "avance"
soit "recule"
, et le champ ensuite
est encore une commande.
Question 1: écrire la valeur correspondant à la commande "avance. avance. recule. stop."
.
Question 2: écrire une fonction qui compte le nombre de mouvements présents dans une commande. ("stop" n'est pas un mouvement). Sur l'exemple précédent, elle renvoie 3
.
Question 3: si on considère que le robot avance de un mètre (+1) quand on lui demande "avance"
, et recule de un mètre (-1) quand on lui demande "recule"
, écrire une fonction qui prend une commande et renvoie la position finale, en mètres; pour "avance. avance. recule. stop."
, on attend 2, pour "recule. stop."
, on attend -1.
Question 4: écrire une fonction Commande -> String
qui prend une commande et renvoie une description textuelle de la commande, dans le format que j'utilise dans cet énoncé (avec des points après chaque mouvement, et après "stop"
.). Sur l'exemple de départ, on attend la chaîne "avance. avance. recule. stop."
.
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"]))