Archive for category Langages fonctionnels
(Petit) Clône de client telnet en Haskell
Posted by Alp Mestan in Langages fonctionnels on août 28th, 2009
Bonjour,
L’autre nuit, muni de café, j’ai souhaité m’amuser avec Haskell. J’ai alors consulté le chapitre sur le réseau en Haskell de Real World Haskell et… j’ai écrit un (très petit) clône de client telnet… qui fait 41 lignes. Le seul soucis étant que dans toute application de ce genre, on doit partager habilement la lecture des entrées de l’utilisateur, et l’affichage de ce que l’on nous envoie. Ceci mis à part, tout cela fonctionne très bien !

Haskell Platform, ou comment se mettre à Haskell sans soucis !
Posted by Alp Mestan in Langages fonctionnels on août 12th, 2009
Bonjour à tous,
Cela fait quelques temps maintenant que la communauté Haskell a sorti Haskell Platform. Il s’agit d’un « paquet » qui regroupe :
- le compilateur haskell GHC, un debugger, un profiler, etc
- les bibliothèques les plus populaires et les plus utilisées, fournies d’office
- tout un tas d’outils auxiliaires, comme haddock, qui permet de générer de la documentation depuis les commentaires du code source.
Il existe des paquets pour déjà quelques distributions Linux, sachant que ce sera bientôt prêt pour Debian et Ubuntu également. Les installeurs Windows et Mac sont très simples également.
Bref, plus aucune raison de ne pas essayer Haskell
GTK+ en Haskell
Posted by Alp Mestan in Langages fonctionnels on juin 16th, 2009
Bonjour,
M’étant mis à Haskell depuis quelques temps (principalement grâce au désormais fameux Real World Haskell), je me suis dis qu’il était temps que je regarde un peu du côté des bibliothèques pour interfaces utilisateurs. Hé bien, je n’ai pas été déçu. Il y a notamment Gtk2Hs qui fournit un bon binding de GTK+, compatible avec Glade (le designer) et qui permet donc de charger des interfaces depuis du XML.

Récupération et parsing d’un flux Atom XML en Haskell
Posted by Alp Mestan in Langages fonctionnels on mai 4th, 2009
Bonsoir,
Il y a peu, on m’a demandé d’écrire un programme qui récupère un flux Atom XML et qui ne récupère que le titre et l’url des éléments (qui en l’occurence sont des billets aggrégés sur Planet OCaml).
J’ai hésité entre OCaml, C++ et Haskell. Plutôt tenté par du fonctionnel, mon choix s’est vite porté sur Haskell grâce au nombre impressionnant de paquets présents sur Hackage.
J’ai donc opté pour le paquet feed pour la gestion d’Atom et download pour la récupération du XML distant, qui se situe ici).
Haskell Logo
OCaml et la 3D : CamlGL & LablGL
Posted by Alp Mestan in Langages fonctionnels on avril 29th, 2009
Bonsoir,
Comme demandé récemment par l’un des membres, il est tout à fait possible de faire de la 3D avec OpenGL en OCaml. Il y a principalement 2 bindings.
Inutile de commencer à donner un cours sur OpenGL, la plupart d’entre vous connaissant déjà, qui plus est il y a tout le nécessaire pour OpenGL en C & C++. Ces deux bibliothèques OCaml ne sont que des bindings, c’est à dire qu’elles appellent les fonctions C classiques en interfaçant par le biais de fonctions OCaml.
Juste pour vous donner une idée, voici un extrait du code correspondant au screenshot ci-dessus. Il s’agissait ici de montrer que ça existe, à quoi ça ressemble et où trouver le nécessaire pour s’y mettre.
let draw_gl_scene () = glClear (gl_color_buffer_bit lor gl_depth_buffer_bit) ; (* Clear The Screen And The Depth Buffer *) glLoadIdentity () ; (* Reset The View*) glTranslatef 0.0 0.0 !z ; (* move z units out from the screen. *) glRotatef !xrot 1.0 0.0 0.0 ; (* Rotate On The X Axis *) glRotatef !yrot 0.0 1.0 0.0 ; (* Rotate On The Y Axis *) glBindTexture gl_texture_2d texture.(!filter) ; (* choose the texture to use. *) glBegin gl_quads ; (* begin drawing a cube *) (* Front Face note that the texture's corners have to match the quad's corners *) glNormal3f 0.0 0.0 1.0 ; (* front face points out of the screen on z. *) glTexCoord2f 0.0 0.0 ; glVertex3f (-.1.0) (-.1.0) 1.0 ; (* Bottom Left Of The Texture and Quad *) glTexCoord2f 1.0 0.0 ; glVertex3f 1.0 (-.1.0) 1.0 ; (* Bottom Right Of The Texture and Quad *) glTexCoord2f 1.0 1.0 ; glVertex3f 1.0 1.0 1.0 ; (* Top Right Of The Texture and Quad *) glTexCoord2f 0.0 1.0 ; glVertex3f (-.1.0) 1.0 1.0 ; (* Top Left Of The Texture and Quad *) (* Back Face *) glNormal3f 0.0 0.0 (-.1.0) ; (* back face points into the screen on z. *) glTexCoord2f 1.0 0.0 ; glVertex3f (-.1.0) (-.1.0) (-.1.0) ; (* Bottom Right Of The Texture and Quad *) glTexCoord2f 1.0 1.0 ; glVertex3f (-.1.0) 1.0 (-.1.0) ; (* Top Right Of The Texture and Quad *) glTexCoord2f 0.0 1.0 ; glVertex3f 1.0 1.0 (-.1.0) ; (* Top Left Of The Texture and Quad *) glTexCoord2f 0.0 0.0 ; glVertex3f 1.0 (-.1.0) (-.1.0) ; (* Bottom Left Of The Texture and Quad *) (* Top Face *) glNormal3f 0.0 1.0 0.0 ; (* top face points up on y. *) glTexCoord2f 0.0 1.0 ; glVertex3f (-.1.0) 1.0 (-.1.0) ; (* Top Left Of The Texture and Quad *) glTexCoord2f 0.0 0.0 ; glVertex3f (-.1.0) 1.0 1.0 ; (* Bottom Left Of The Texture and Quad *) glTexCoord2f 1.0 0.0 ; glVertex3f 1.0 1.0 1.0 ; (* Bottom Right Of The Texture and Quad *) glTexCoord2f 1.0 1.0 ; glVertex3f 1.0 1.0 (-.1.0) ; (* Top Right Of The Texture and Quad *) (* Bottom Face *) glNormal3f 0.0 (-.1.0) 0.0 ; (* bottom face points down on y. *) glTexCoord2f 1.0 1.0 ; glVertex3f (-.1.0) (-.1.0) (-.1.0) ; (* Top Right Of The Texture and Quad *) glTexCoord2f 0.0 1.0 ; glVertex3f 1.0 (-.1.0) (-.1.0) ; (* Top Left Of The Texture and Quad *) glTexCoord2f 0.0 0.0 ; glVertex3f 1.0 (-.1.0) 1.0 ; (* Bottom Left Of The Texture and Quad *) glTexCoord2f 1.0 0.0 ; glVertex3f (-.1.0) (-.1.0) 1.0 ; (* Bottom Right Of The Texture and Quad *) (* Right face *) glNormal3f 1.0 0.0 0.0 ; (* right face points right on x. *) glTexCoord2f 1.0 0.0 ; glVertex3f 1.0 (-.1.0) (-.1.0) ; (* Bottom Right Of The Texture and Quad *) glTexCoord2f 1.0 1.0 ; glVertex3f 1.0 1.0 (-.1.0) ; (* Top Right Of The Texture and Quad *) glTexCoord2f 0.0 1.0 ; glVertex3f 1.0 1.0 1.0 ; (* Top Left Of The Texture and Quad *) glTexCoord2f 0.0 0.0 ; glVertex3f 1.0 (-.1.0) 1.0 ; (* Bottom Left Of The Texture and Quad *) (* Left Face *) glNormal3f (-.1.0) 0.0 0.0 ; (* left face points left on x. *) glTexCoord2f 0.0 0.0 ; glVertex3f (-.1.0) (-.1.0) (-.1.0) ; (* Bottom Left Of The Texture and Quad *) glTexCoord2f 1.0 0.0 ; glVertex3f (-.1.0) (-.1.0) 1.0 ; (* Bottom Right Of The Texture and Quad *) glTexCoord2f 1.0 1.0 ; glVertex3f (-.1.0) 1.0 1.0 ; (* Top Right Of The Texture and Quad *) glTexCoord2f 0.0 1.0 ; glVertex3f (-.1.0) 1.0 (-.1.0) ; (* Top Left Of The Texture and Quad *) glEnd (); (* done with the polygon. *) xrot := !xrot +. !xspeed; (* X Axis Rotation *) yrot := !yrot +. !yspeed (* Y Axis Rotation *) |
PS : aucun des deux ne semble être encore maintenu, toutefois GlCaml prend en charge les versions d’OpenGL jusqu’à 2.1 + extensions ARB et spécifiques aux vendeurs. GlCaml embarque un binding minimal de la SDL, moins complet que OCamlSDL que j’ai présenté dans un post précédent.
Bouncing Ball en OCaml avec OCamlSDL
Posted by Alp Mestan in Langages fonctionnels on avril 28th, 2009
Bonsoir,
J’ai écrit un petit programme OCaml de Boucing Ball, une balle qui rebondit contre les bords de la fenêtre, où l’on peut augmenter la vitesse en X et en Y avec les touches du clavier.
Il utilise OCamlSDL, un binding de la désormais célèbre bibliothèque SDL pour le langage OCaml.
Voici ce que cela donne.
Si vous voulez tester et/ou améliorer ce programme, qui peut soit dit en passant servir de base pour un Pong ou autre jeu de ce genre, vous trouverez le code source ici : bbsdl.tar.gz.
Enjoy.
La programmation fonctionnelle n’est pas un jouet pour académiciens
Posted by Alp Mestan in Langages fonctionnels, Non classé on avril 26th, 2009
Bonjour,
Cela fait maintenant un moment que j’apprends et pratique la programmation fonctionnelle, aussi bien sur le point de vue théorique en m’intéressant à ses relations avec la théorie des catégories (mathématiques) entre autres, que sur le point de vue pratique, c’est à dire que j’ai mené quelques projets (de petite envergure… oui, c’est proportionnel au temps que je peux passer dessus) à bien.
Quand on dit « langage fonctionnel » ou « programmation fonctionnelle », les gens s’imaginent (pour ceux qui ne connaissent pas) des programmes avec tout un tas de fonctions, c’est tout. Ce n’est pas ça la programmation fonctionnelle. Enfin biensûr il y a des fonctions, mais la programmation fonctionnelle ne s’arrête pas là.
Déjà, la programmation fonctionnelle, c’est une toute autre façon de concevoir des programmes. Détailler toutes les différences avec la programmation impérative serait pire que les 12 travaux d’Hercules et c’est pourquoi je ne le ferai pas. Je vais toutefois vous parler des points qui font que je suis désormais adepte de ce style de programmation.

Read the rest of this entry »
Les sujets en rapport avec OCaml qui vous intéresseraient
Posted by Alp Mestan in Langages fonctionnels, Non classé on avril 26th, 2009

Étant tombé amoureux du langage OCaml, et comptant propulser cette activité de blog sur Coder-Studio, j’aimerais savoir ce que vous, amateur du langage OCaml, de la programmation fonctionnelle en général ou tout simplement curieux, vous souhaiteriez lire en rapport avec OCaml sur notre site préféré
Alors ?
Quelques grandes lignes qui pourraient intéresser :
- OCaml et les maths (comme mon billet précédent)
- OCaml et les GUIs
- OCaml et le multimédia (OCamlSDL, OCaml/OpenGL, …)
- OCaml et la conception de compilateurs/interpréteurs (lexing, parsing, etc)
- …
Merci de donner votre avis !
Construction de l’Ensemble de Cantor en OCaml
Posted by Alp Mestan in Langages fonctionnels, Non classé on avril 19th, 2009
Bonsoir,
Un billet à propos d’OCaml, encore. Je me suis amusé à implémenter la construction de l’Ensemble de Cantor (version anglaise un peu plus complète). Vous voulez en savoir plus ?

Read the rest of this entry »
OCaml Batteries Included : un effort pour fournir une bibliothèque standard digne de ce nom pour OCaml
Posted by Alp Mestan in Langages fonctionnels on avril 11th, 2009
Bonsoir,
Peut-être avez-vous déjà entendu parler de ce projet … OCaml Batteries Included.
Ce projet couvre pour le moment un certain nombre de domaines. Il fournit une certaine quantité de structures de données, de fonctions pour la programmation concurrente, etc. Qui plus est, il inclut des extensions de syntaxes qui pourront s’avérer très utile, ainsi que de nouveaux opérateurs pour rendre le code OCaml plus lisible et concis, ce qui finalement fait gagner en lisibilité (notamment pour l’enchainement de fonctions, comme lorsque l’on appelle une série de fonctions opérant sur une chaîne de caractères, en passant le résultat d’une fonction à la suivante, et ainsi de suite). Je ne vais pas lister les bibliothèques, ce serait trop long.
OCaml Batteries Included est sortie en version Bêta 1 il y a quelques jours. Qui plus est, l’équipe OCaml-Debian-Maintainers a mis à disposition un paquet ocaml-batteries-included qui est dans le dépôt testing officiel, n’hésitez pas !
Pour finir, quelques liens :
Site officiel
Documentation de l’API
Documentation de la plateforme
Billet de blog sur la publication de la Beta 1
Enjoy !




Commentaires récents