Project de Programmation Fonctionnelle Avancée, 2013

Le projet se découpe en deux parties. Vous pouvez travailler sur les deux parties séparément, mais les idées se recoupent.

Partie 1: combinateurs pour la recherche de solutions à un problème logique

Vous devez implémenter un module de combinateurs pour décrire la recherche de solutions, par exemple de triplets pythagoriciens. La difficulté de cette partie est de pouvoir gérer les (sous-)problèmes avec un nombre infini de solutions.

L'interface pour laquelle vous devez écrire une implémentation est sujet_search.mli (page web).

Partie 2: combinateurs pour les algorithmes probabilistes (utilisant le hasard)

Vous devez implémenter un module de combinateurs pour décrire l'utilisation du hasard dans les algorithmes, permettant de calculer les probabilités de chacune des réponses possibles.

Je vous ai donné un peu de code qui devrait vous aider, donc le sujet est dans un .ml à étendre et compléter: sujet_prob.ml (page web).

Cette deuxième partie est plus ouverte que la première : je vous demande d'implémenter des algorithmes de mélange aléatoire de tableaux, mais ensuite vous êtes libre de choisir de travailler sur autre chose (ou de vous arrêter là).

Remarques, informations, etc.

Le projet est à rendre pour le lundi 6 janvier.

Vous pouvez travailler en groupe (mais je vous déconseille de vous mettre à plus de deux ou trois par groupe).

Si vous êtes amenés à reprendre ou adapter du code déjà écrit (par exemple un algorithme présenté sur Wikipédia, ou si un ami vous a dépanné sur un point précis qui vous faisait bloquer), il faut impérativement le préciser explicitement dans votre projet. Réutiliser du code non écrit par vous-même sans le dire sera considéré comme de la triche; au contraire, avoir un peu de code qui vient d'ailleurs dans son projet n'est pas étonnant, tant que c'est dit explicitement.

Si vous avez une question, n'hésitez pas à m'envoyer un mail (gabriel dot scherer chez gmail). J'ai déjà reçu plusieurs mails sur le projet, et j'essaie d'y répondre rapidement.

Je mettrai à jour cette page pour ajouter des informations supplémentaires selon le besoin.