Le 16 mai est sorti la version 3.10.0 de Objective Caml, implémentation du langage Caml (Categorical Abstract Machine Language) créé par l'INRIA.
Objective Caml est la principale variante du langage Caml. Du point de vue du langage, elle étend le noyau du langage Caml avec une couche orientée objets complète, ainsi qu'un système de modules puissant. Un système de types polymorphe avec inférence automatique des types assure la cohérence de ces traits. Le langage est entièrement développé et maintenu par l'INRIA. Il est distribué sous licence QPL 1.0 tandis que les bibliothèques sont sous licence LGPL 2.
En plus des sources, des binaires sont proposés pour GNU/Linux (format RPM, deb ou Gentoo) et pour Win32. Les binaires Mac OS X ne sont pas encore disponibles.
NdR: Merci à benja pour son journal.
Objective Caml est la principale variante du langage Caml. Du point de vue du langage, elle étend le noyau du langage Caml avec une couche orientée objets complète, ainsi qu'un système de modules puissant. Un système de types polymorphe avec inférence automatique des types assure la cohérence de ces traits. Le langage est entièrement développé et maintenu par l'INRIA. Il est distribué sous licence QPL 1.0 tandis que les bibliothèques sont sous licence LGPL 2.
En plus des sources, des binaires sont proposés pour GNU/Linux (format RPM, deb ou Gentoo) et pour Win32. Les binaires Mac OS X ne sont pas encore disponibles.
NdR: Merci à benja pour son journal.
L'annonce sur le site de l'INRIA (698 hits)
La page de téléchargement (213 hits)
La licence (131 hits)
Le changelog complet (178 hits)
Pour creuser : les livres sur le langage (360 hits)
DLFP : le journal d'origine (209 hits)
> Lire la dépêche (88 commentaires, moyenne: 2,6).
Vous avez demandé le commentaire #835173.




Lisibilité et produit de matrices
[^]Re: Lisibilité et produit de matrices
Dans pas mal de situations, Caml permet d'écrire lisiblement là où ni C ni Java ne le permettent (et la réciproque est plutôt rare).
Suivi d'un tas de code incompréhensible...
Je ne suis pas sur que la démonstration soit convaincante.
[^]Re: Lisibilité et produit de matrices
Pareil : il faudrait voir l'équivalent en C ou Java ou autre pour comparaison. Pour ma part, je n'ai rien compris à son code.
[^]Re: Lisibilité et produit de matrices
ou en Perl
no, wait...
Windows has no users. It has hostages.
[^]Re: Lisibilité et produit de matrices
C'est vraiment question d'habitude.
Il part du principe qu'une matrice, c'est un tableau dont on veut remplir les cases.
Pour cela, il utilise la fonction
> let init_matrix f = Array.init n (fun i -> Array.init n (fun j -> f i j));;
qui prend en paramètre une fonction f à deux arguments et qui construit la matrice
f(0,0), f(0,1), f(0,2), f(0,3),...
f(1,0), f(1,1), f(1,2),...
f(2,0), f(2,1),...
f(3,0),...
Une fois qu'on a cette fonction, il suffit de donner en paramètre la fonction qui calcule le coëfficient. Je trouve cette approche très élégante.
Pour l'addition, c'est la fonction
> fun i j -> p1.(i).(j) +. p2.(i).(j)
qui me semble vraiment lisible.
Pour la multiplication, c'est la fonction
> fun i j -> sigma 0 (n-1) (fun k -> p1.(i).(k) *. p2.(k).(j))
Cette fonction est un poil plus compliquée mais pas trop.
il a d'abord défini la fonction
sigma i j f ->
qui calcule f(i)+. ...+.f(j)
ainsi, sigma 0 (n-1) (fun k -> p1.(i).(k) *. p2.(k).(j))
calcule p1.(i).(0)*p2.(0).(j)+. ... +. p1.(i).(n-1)*p2.(n-1).(j), ce qui est bien la valeur voulue.
Pour définir la matrice identité, on utilise
fun i j -> if i=j then 1. else 0.
etc...
Bref, ce n'est pas parce que vous n'avez pas l'habitude de programmer de façon fonctionnelle que son code n'est pas élégant.
[^]Re: Lisibilité et produit de matrices
Tout à fait d'accord !
D'ailleurs, je trouve rigolo de constater que ce qui rend son code beaucoup plus lisible que le mien là haut, c'est qu'il colle plus aux méthodes usuelles en mathématique; par exemple, la fonction sigma qui me paraît au premier abord le mélange obscur d'un init et d'un fold_left, est en fait plus naturelle à utiliser dans ce contexte que les init et les fold_left qui vont bien, parce qu'elle reflète l'écriture mathématique.
Ma deuxième erreur a été de ne pas extraire le principe du double init : lui donner un nom (ici init_matrix) aide indéniablement à la compréhension.
[^]Re: Lisibilité et produit de matrices
> Le compilo caml les a toutes corrigées
Heu...
On va dire que j'ai mal compris, là. Tu peux expliciter ? Parce que un compilo qui corrige tout seul des trucs, moi ça a plutôt tendance à me faire peur...
[^]Re: Lisibilité et produit de matrices
Je pense que ce qu'il veut dire, et que tout les programmeurs OCaml ont expérimenté, c'est que le typage strict d'OCaml, associé aux avertissements en cas de filtrage non exhaustifs (ou le programmeur n'a pas envisagé tous les cas) permet au compilateur de lever des erreurs su beaucoup plus de cas.
Donc en fait si ton code compiles, il a beaucoup moins d'erreurs possibles que ton code C qui compile...
Par ailleurs la programmtion en Caml est souvent plus "sûre" car elle permet de coller de près aux concepts mathématiques. En effet de très nombreux algorithmes sont définis par des récursions, ou par "induction", ce qui se traduit littéralement en Caml...