Mailing list for all users of the OCaml language and system.
 help / color / mirror / Atom feed
From: blanchet@clipper.ens.fr (Bruno Blanchet)
To: caml-list@pauillac.inria.fr
Subject: Caml Dim
Date: Thu, 7 Dec 1995 17:47:16 +0100 (MET)	[thread overview]
Message-ID: <199512071647.RAA04571@clipper.ens.fr> (raw)


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.




                 reply	other threads:[~1995-12-07 20:08 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=199512071647.RAA04571@clipper.ens.fr \
    --to=blanchet@clipper.ens.fr \
    --cc=caml-list@pauillac.inria.fr \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox