Programmation Fonctionnelle, Projet 2015

Version & licenses
Creative Commons License

Chamortue, ou Tortameau ?

Guyslain Naves

Une tortue en OCaml

Dans le cadre de ce projet, vous allez écrire un petit programme similaire à la tortue en Logo, à laquelle on donne des ordres simples pour se déplacer, et sa trajectoire permet de faire des jolis dessins, ou pas.

Vous utiliserez le module Graphics pour les dessins, sauf si vous êtes ambitieux, dans ce cas vous pouvez utiliser le compilateur js_of_ocaml pour obtenir un fichier javascript et l'inclure ensuite dans une page html. C'est ce que j'ai fait, si vous regardez en bas de cette page (cela vous permettra aussi de tester la sémantique de la tortue).

Tâches

Voici ce que vous devrez faire pour réaliser ce projet :

  • un module pour les vecteurs,
  • un module pour la tortue, qui définira :
    • la tortue,
    • les différentes instructions que peut recevoir la tortue,
    • une fonction pour créer une tortue avec une liste d'instructions (un programme),
    • une fonction qui fait dessiner une tortue.
  • un module pour lire les instructions depuis un fichier ou une chaine de caractères, ou bien les deux.
  • enfin un module principal, qui lit les instructions, crée la tortue, et fait dessiner la tortue.

Instructions reconnues par la tortue

Voici les instructions que reconnait ma tortue, que j'ai tenté de classer de la plus simple à la plus compliquée à implémenter :

  • end : la tortue s'arrête définitivement (sauf si elle est en train d'effectuer un repeat ou un jump),
  • forward float : la tortue avance de la distance donnée,
  • backward float : la tortue recule de la distance donnée,
  • left float : la tortue tourne sur elle-même, du nombre de degrés donné, dans le sens trigonométrique,
  • right float : la tortue tourne sur elle-même, du nombre de degré donné, dans le sens horaire,
  • pendown : la tortue commence à dessiner,
  • penup : la tortue arrête de dessiner,
  • penswitch : si la tortue dessinait, elle arrête, et inversement,
  • grow float : la tortue grandit, tous ses déplacements futurs seront allongés par le facteur donné en argument,
  • shrink float : la tortue rétrécit, tous ses déplacements futurs seront raccourcis par le facteur donné en argument,
  • color rgb float float float : le pinceau de la tortue prend la couleur donnée par ses trois composantes rouge, verte, bleue.
  • color string : le pinceau de la tortue prend la couleur donnée en argument, avec le format d'une couleur svg,
  • string : place un marqueur à cette ligne du programme,
  • jump string : la tortue va à l'endroit du programme indiqué par le marqueur, s'il existe. Ensuite, elle continue jusqu'à atteindre une instruction end, puis reprend la suite du programme normalement (c'est donc comme un appel de fonction sans argument),
  • repeat int : la tortue exécute la prochaine partie du programme autant de fois que l'entier donné. La partie du programme s'arrête à la prochaine instruction end qui ne soit pas en correspondance avec un repeat ou un marqueur apparaissant entre temps (autrement dit, les repeat et les marqueurs sont parenthésés avec les end).

Chaque ligne d'un programme contient au plus une instruction. Une ligne peut être vide. On peut aussi faire une ligne de commentaire en commençant la ligne avec deux tirets --.

Essayer de coder un maximum d'instructions parmi celles-là, et d'autres si vous en avez le temps et l'envie.

Penser à faire quelques jolis dessins pour démontrer les capacités de votre tortue.