caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
* Caml Dim
@ 1995-12-07 16:47 Bruno Blanchet
  0 siblings, 0 replies; only message in thread
From: Bruno Blanchet @ 1995-12-07 16:47 UTC (permalink / raw)
  To: caml-list


Caml Dim, extension de Caml Light 0.7 qui gere les types avec dimensions,
est disponible par ftp anonyme :

   host : ftp.ens.fr
   directory : /pub/unix/lang/caml/camldim

Voici une description succinte de ce programme. Vous trouverez plus de
details dans mon rapport inclus dans les archives sur ftp.

Caml Dim est une extension du compilateur Caml Light, pour lui
permettre de contrôler les dimensions des donnees manipulees.
Les verifications de type effectuees par le compilateur
sont donc renforcees, et les erreurs peuvent etre signalees 
à l'utilisateur.
Les seuls constructeurs predefinis qui prennent des arguments
dimensionnels sont int et float.
L'utilisateur peut definir ses propres types dimensionnes a partir de ceux-ci.
Par exemple :
   type ['d] complex = {re : ['d] float; im: ['d] float};;
   type 'a ['d] abbrev == 'a * ['d] complex;;
(les dimensions sont indiquees entre crochets. Voir les details de la syntaxe
dans mon rapport).

Tous les identificateurs de dimension doivent etre declares par l'instruction 
   dimension nom(unite);;
Exemple : dimension length(m);;
L'identificateur m est alors une constante de type [length] float
et qui a pour valeur numerique 1.

Pour profiter des dimensions, il faut ouvrir les modules
dfloat (flottants avec dimensions), dint (entiers avec dimensions) et 
dimens (declarations d'unites physiques courantes).
Ces modules ne sont pas ouverts au depart pour compatibilite avec Caml Light.

Exemple de programme simple :

#open "dfloat";;
#open "dimens";;

let R = 1e3 * ohm;;
let C = 1e-10 * farad;;
type ['d] complex = {re : ['d] float; im : ['d] float};;

let (prefix *) = fun a b -> 
   {re = a.re *. b.re -. a.im *. b.im;
    im = a.re *. b.im +. b.re *. a.im};;

let (prefix /) = fun a b -> 
   let carremod = sqr(b.re)+. sqr(b.im) 
   in {re = (a.re *. b.re +. a.im *. b.im) /. carremod;
       im = (a.im *. b.re -. a.re *. b.im) /. carremod};;
   
let calcu w ( i : [intensity] complex ) =
   i / {re = 2. /. R; im = C *. w};;

Tous commentaires peuvent etre envoyes a Bruno.Blanchet@ens.fr


                                   Bruno Blanchet.




^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~1995-12-07 20:08 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
1995-12-07 16:47 Caml Dim Bruno Blanchet

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).