Le jeu de la vie en racket - partie 1
Le troisième volet de cette série le jeu de la vie en 7 langages
sera consacré à Racket, un dialecte de Lisp.
Télécharger le ici: http://download.racket-lang.org/
et installez avec bash ./nom-du-fichier.sh
On commence par un smoke test pour être sûr que Racket est bien installé et
accessible. Dans un fichier game-of-life-test.rkt
, chargez le framework de
test et le futur fichier d’implémentation.
Puis executez le :
$ racket game-of-life-test.rkt
game-of-life-test.rkt:4:9: cannot open module file
Cool, Racket est là et nous dit qu’il ne peut pas ouvrir le fichier
game-of-life.rkt
. Créons le :
touch game-of-life.rkt
Premier test maintenant, la fonction create-generation
doit renvoyer une
liste.
$ racket game-of-life-test.rkt
game-of-life-test.rkt:6:19: create-generation: unbound identifier in module
Ok, on renvoie donc une liste vide '()
. Notez aussi provide
, qui permet de
définir en quelque sorte les fonctions publiques du fichier.
rackunit
, le framework de test shippé avec Racket peut aussi documenter
les tests:
On crée une liste de la bonne taille, et comme on se fiche pour l’instant de ce qu’elle contient, on peut l’initialiser avec des zéros.
Chaque élément de la liste doit aussi être une liste (la dimension x
).
$ racket game-of-life-test.rkt
length: contract violation
expected: list?
given: 0
J’utilise for/list
pour construire cette fameuse liste à deux dimensions. Les
différentes variantes de for
me semble très utilisées en Racket.
Finalement, je veux que ma liste contiennent des 0
(cellule morte) et des
1
(cellule vivante).
Ce dernier bout de code contient un bug qui n’est pas attrapé par les tests (vous l’avez vu ?). Je fixerais ça dans le prochain article.