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"]))