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