, SpiceGuid 
Un exercice simple pour débutant en ocaml c'est d'écrire un interpréteur pour un petit langage simple comme par exemple une calculatrice :
type arithmetic = | Cst of int | Neg of arithmetic | Add of binary | Sub of binary | Mul of binary | Div of binary and binary = arithmetic * arithmetic
Mais cet exercice anodin change complètement de nature quand on passe à un langage fortement normalisant, dans ce cas vous devez aussi prouver que le programme se termine toujours et sans accident, quelles que soient les circonstances.
Vous devez être identifié pour poster un commentaire.
, SpiceGuid 
Sylvain Le Gall et l'équipe organisatrice de la 3ième rencontre des programmeurs Objective-Caml vous donnent rendez-vous le 16 Avril à Paris.
Malheureusement je ne pourrai pas être présent cette année.
Vous devez être identifié pour poster un commentaire.
, SpiceGuid 
Le tas binaire est un tableau qui implémente un arbre pseudo-complet vérifiant la propriété de tas.
Un tableau est de taille fixe. Par conséquent un tas binaire est borné, on ne peut y insérer qu'un nombre fixe et limité d'éléments. Bien sûr on pourrait redimensionner le tableau dynamiquement, mais cela a un impact négatif sur le coût des opérations.
Qu'on prêche le style impératif ou le style fonctionnel est étrangé à l'affaire.
La bonne question c'est de savoir si on connait d'avance le nombre d'éléments à insérer ou non.
Si on le connait alors un tas binaire fera très bien l'affaire.
Si on ne le connait pas, alors autant opter tout de suite pour un arbre binaire, même si on veut garder un style impératif.
Ça serait exactement la même problématique avec un dictionnaire. On peut faire une recherche dichotomique dans un tableau trié. Ou alors on peut faire une recherche dans un arbre ordonnée.
Dans les deux cas l'algorithme de recherche est le même, il s'agit dune boucle qui à chaque étape découpe l'espace de recherche en deux moitiés dont une seule peut contenir l'élément recherché.
Le paradigme a bien un impact sur le programmeur mais c'est parce que le programmeur est trop attaché à la syntaxe.
En réalité le paradigme impacte plus fortement la façon de faire que la façon de penser.
L'expérience aussi est un facteur qui impacte la façon de faire.
C'est pourquoi je préfère parler de style plutôt que de paradigme.
Vous devez être identifié pour poster un commentaire.
, SpiceGuid 
Un MIME (Multipurpose Internet Mail Extension) est une information système pour identifier les types de fichier et leur affecter certains attributs comme une commande par défaut ou une icône personnalisée.
Ce billet vous propose d'agrémenter votre station de développement Objective-Caml à l'aide d'un MIME pour vos fichiers source.
Bien sûr ça n'est qu'un exemple que vous pourrez adapter à votre application ou à votre langage de programmation favori.
Vous devez être identifié pour poster un commentaire.
, SpiceGuid 
Le billet d'aujourd'hui a pour but de faire toute la lumière sur la qualification à l'intérieur des modules Objective-Caml.
Vous devez être identifié pour poster un commentaire.
, SpiceGuid 
Comme vous le savez sans doute le let ne permet pas seulement de déclarer une nouvelle variable par exemple ici la variable m :
let choose = function
| None -> None
| Some n -> let m = minimum n n.left in Some (m.key,m.item)
Il permet aussi de déconstruire une valeur selon un motif comme ici la paire (m,l) :
let rec delete_min t =
match t.left with
| None -> t,t.right
| Some n -> let m,l = delete_min n in m,Some {t with left = l}
Vous devez être identifié pour poster un commentaire.
, SpiceGuid 
À la lecture de The Art of the Propagator je me suis laissé convaincre que l'avenir de la programmation déclarative était dans la propagation logique. L'intérêt de la propagation c'est que le calcul monodirectionnel disparaît, le calcul devient multi-directionnel, la béta-réduction devient la béta-équivalence.
Jusqu'à présent je m'étais toujours dit "et alors, quel intérêt ?".
C'est là que The Art of the Propagator apporte un argument de poids :
Vous devez être identifié pour poster un commentaire.
, SpiceGuid 
Encore plus fort!
Plus d'arguments mais cette fois-ci sans application partielle!
Vous conviendrez aisément que cette fonction ne prend qu'un seul argument:
let id x = x
Hé bien je peux, mesdames et messieurs, devant vos yeux ébahis, lui appliquer 4 arguments:
# id id (+) 1 2;; - : int = 3
Et c'est bien typé!
Incroyable, ils sont fous ces programmeurs fonctionnels!
Vous devez être identifié pour poster un commentaire.
, SpiceGuid 
Dans mon petit exemple de ce jour on va utiliser l'application partielle pour faire l'inverse de ce qu'on en fait habituellement. Au lieu d'éliminer un argument on va au contraire en ajouter un supplémentaire.
L'idée de départ c'est que, étant donné un opérateur diadic (supposé associatif à droite), nous l'appliquons deux fois pour pouvoir opérer sur 3 arguments:
let triadic op a b c = op a (op b c);;
Une application partielle sert à produire un nouvel opérateur triadic:
let plus_plus = triadic (+);;
Comme on a appliqué un argument, la fonction plus_plus ne prend plus que 3 arguments au lieu de 4 pour la fonction triadic.
C'est un point de vue, en tout cas c'est celui mis en avant dans nombre d'introductions à la programmation fonctionnelle.
Un autre point de vue, sans doute plus approprié ici, c'est que la fonction plus_plus prend 3 arguments au lieu de 2 pour la fonction (+) :
plus_plus 1 2 3;; - : int = 6
Vous devez être identifié pour poster un commentaire.
, SpiceGuid 
GtkMathView est un widget GTK+ pour l'affichage des formules au standard MathML.
Un binding GtkMathView pour LablGtk2 est disponible (encadré "more download" en bas à gauche de la page d'accueil) :
Je n'ai personnellement pas tenté d'installer ce composant, je vous invite à laisser un commentaire si vous avez fait l'expérience.
Vous devez être identifié pour poster un commentaire.
, SpiceGuid 
S'il y a une chose qui m'étonne c'est qu'avec toutes les abstractions à la disposition du programmeur OCaml il soit encore difficile d'implanter correctement un TAD ensemble.
Dans ma bibliothèque de structures de données (OCaml-Idaho) j'ai opté pour une implantation par arbre de recherche équilibré. La cohérence de mes fonctions de comparaison est assurée par un paramétrage par les modules. Grâce aux higher-order modules on peut associer chaque type à une valeur. En associant le type set à une fonction compare on s'assure qu'il ne sera pas possible de faire l'union de deux ensembles d'éléments de même sorte mais qui n'utiliseraient pas la même fonction de comparaison.
C'est sécurisant et ça me convenait très bien tant que j'implantais des fonctions comme union, intersection, difference, subset ou bien filter.
Là où plus rien ne va c'est avec le produit cartésien de deux ensembles.
Vous devez être identifié pour poster un commentaire.
, SpiceGuid 
J'ai installé Eastwest, un langage intégré avec un éditeur dirigé par la syntaxe dont j'ai parlé dans mon précédent billet.
C'est sympathique mais encore très expérimental.
À titre de démonstration voici un petit dérivateur formel pour Eastwest.
Je me suis quand même un peu fait avoir sur cet exemple parce que Eastwest accepte les constantes float dans les motifs mais en fait il les traite comme de nouvelles variables.
Du coup mon code qui paraît correct à la lecture a tendance à faire disparaître des constantes à l'exécution.
C'était néanmoins un bon exercice pour explorer le potentiel de cet IDE un peu particulier.
Vous devez être identifié pour poster un commentaire.
Objective-Caml et la programmation fonctionnelle :


| Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 |
Copyright © 2000-2012 - www.developpez.com