caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: Christophe Raffalli <Christophe.Raffalli@univ-savoie.fr>
To: Guillaume Marceau <gmarceau@cs.brown.edu>
Cc: caml-list@inria.fr
Subject: Re: [Caml-list] about -rectypes
Date: Tue, 11 Mar 2003 17:47:24 +0100	[thread overview]
Message-ID: <3E6E131C.2040804@univ-savoie.fr> (raw)
In-Reply-To: <1047392843.16158.2192.camel@anquetil>

[-- Attachment #1: Type: text/plain, Size: 2103 bytes --]

It would be nice to be able to use recursive types without -rectypes.
Not in general (accept too much bad programs with very strange type)
but at least in one of the two case:

- the recursive types are introduced by a recursive definition

- the "loopin types" respects a positivity condition (I have no example 
of bad programs accepted with strange types in the case ... but this is 
probably because this is not implemented).

Here is a nice program (that needs -rectypes) and this is a pitty :-)

----------

(*
   a very short representation of ordinals up to epsilon_0 as a fixpoint 
of list (remark: the are more than one representation for each ordinals:
   [[];[[]]] = [[[]]] != [[[]];[]] ) *)
*)
type ord = ord list

let rec compare  (o1:ord) (o2:ord) = match o1, o2 with
   | [], [] -> 0
   | [], _ -> -1
   | _, [] -> 1
   | x::o1', y::o2' ->
       match compare x y with
	-1 -> compare o1' o2
       | 1 -> compare o1 o2'
       | 0 -> compare o1' o2'

let lesseq o1 o2 = compare o1 o2 <= 0

(* compute the simplest form of an ordinal*)
let rec normalize (o1:ord) =
   let rec add l x =
     let x = normalize x in
     match l with
       [] -> [x]
     | y::l' -> if lesseq x y then x::l else add l' x
   in
   List.rev (List.fold_left add [] o1)

let zero = ([] : ord)
let un = ([[]] : ord)
let deux = ([[];[]] : ord)
let omega = ([[[]]] : ord)
let deux_omega = ([[[]];[[]]] : ord)
let omega_carré = ([[[];[]]] : ord)
let omega_to_the_omega = ([[[[]]]] : ord)

(* exercise: implements addition, multiplication and exponentiation of
ordinals, as epsilon_0 is the smallest ordinals closed for these 
operation after omega *)

---------
-- 
Christophe Raffalli
Université de Savoie
Batiment Le Chablais, bureau 21
73376 Le Bourget-du-Lac Cedex

tél: (33) 4 79 75 81 03
fax: (33) 4 79 75 87 42
mail: Christophe.Raffalli@univ-savoie.fr
www: http://www.lama.univ-savoie.fr/~RAFFALLI
---------------------------------------------
IMPORTANT: this mail is signed using PGP/MIME
At least Enigmail/Mozilla, mutt or evolution
can check this signature
---------------------------------------------

[-- Attachment #2: Type: application/pgp-signature, Size: 252 bytes --]

  parent reply	other threads:[~2003-03-12 16:58 UTC|newest]

Thread overview: 88+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-03-06 23:27 [Caml-list] OCaml popularity Graham Guttocks
2003-03-10 20:43 ` Paul Steckler
2003-03-10 23:48 ` Gerd Stolpmann
2003-03-11  0:18   ` Brian Hurt
2003-03-17 23:49   ` Graham Guttocks
2003-03-11  1:43 ` Nicolas Cannasse
2003-03-11 10:23   ` Pierre Weis
2003-03-11 14:27     ` Guillaume Marceau
2003-03-11 16:16       ` David Brown
2003-03-11 16:47       ` Christophe Raffalli [this message]
2003-03-12  2:32       ` Nicolas Cannasse
2003-03-12  3:55         ` Cross-platform GUI (was Re: [Caml-list] OCaml popularity) mgushee
2003-03-12 10:51         ` [Caml-list] OCaml popularity Alex Romadinoff
2003-03-12 18:24         ` Max Kirillov
2003-03-11 19:02     ` Graham Guttocks
2003-03-12 17:12       ` Richard W.M. Jones
2003-03-12 18:08         ` Alwyn Goodloe
2003-03-12 22:34           ` Michael Schuerig
2003-03-12 23:13             ` Martin Weber
2003-03-12 23:35               ` Michael Schuerig
2003-03-13  8:02                 ` Alessandro Baretta
2003-03-13 10:23                   ` Michael Schuerig
2003-03-12 23:35             ` Brian Hurt
2003-03-12 23:18         ` Daniel Bünzli
2003-03-12 23:47           ` Brian Hurt
2003-03-13  2:15         ` William Lovas
2003-03-13  3:44           ` Graham Guttocks
2003-03-13  9:31           ` Richard W.M. Jones
     [not found]           ` <20030313095232.GC347@first.in-berlin.de>
2003-03-13 20:50             ` William Lovas
2003-03-13 21:17               ` Oliver Bandel
2003-03-13 22:01                 ` Brian Hurt
2003-03-13 22:17                 ` Oliver Bandel
2003-03-14  6:33                 ` Michal Moskal
2003-03-14 11:50                   ` Markus Mottl
2003-03-14 15:38                     ` Oliver Bandel
2003-03-14 10:13               ` MikhailFedotov
2003-03-14 10:30                 ` Johann Spies
2003-03-13  8:09       ` Pierre Weis
2003-03-15  1:43     ` Tushar Samant
2003-03-15  8:19       ` Andreas Eder
2003-03-11 16:26   ` Fred Yankowski
2003-03-11 19:47     ` [Caml-list] OCaml popularity (long!) mgushee
2003-03-12 11:23       ` Diego Olivier Fernandez Pons
2003-03-30  5:59         ` Belated thanks (was Re: [Caml-list] OCaml popularity) Matt Gushee
2003-03-31 15:27           ` [Caml-list] Re: Belated thanks cashin
2003-04-01  8:22           ` Belated thanks (was Re: [Caml-list] OCaml popularity) Johann Spies
2003-03-12 20:41       ` [Caml-list] OCaml popularity (long!) Max Kirillov
2003-03-13  2:36         ` Haskell-like syntax (was: [Caml-list] OCaml popularity (long!)) Oleg
2003-03-13 18:33           ` [Caml-list] Re: Haskell-like syntax Max Kirillov
2003-03-14 19:30             ` Max Kirillov
2003-03-14 19:47               ` Max Kirillov
2003-03-14 20:01               ` Seth Kurtzberg
2003-03-14 20:34                 ` brogoff
2003-03-14 21:17                   ` Sebastien Carlier
2003-03-14 21:51                     ` brogoff
2003-03-15  2:27                 ` Max Kirillov
2003-03-15 10:58                   ` Markus Mottl
2003-03-15 15:52                     ` [Caml-list] globally valid symbols (was: Haskell-like syntax) Max Kirillov
2003-03-15 20:16                     ` [Caml-list] Re: Haskell-like syntax David Brown
2003-03-16  5:28                     ` Module recursion (Was Re: [Caml-list] Re: Haskell-like syntax) brogoff
2003-03-16 11:10                       ` Markus Mottl
2003-03-16 18:02                         ` brogoff
2003-03-16 18:34                           ` Markus Mottl
     [not found]                     ` <Pine.LNX.4.44.0303152112560.27230-100000@grace.speakeasy.n et>
2003-03-16  5:38                       ` Chris Hecker
2003-03-16 18:34                         ` brogoff
2003-03-17  2:20                           ` Jacques Garrigue
     [not found]                         ` <Pine.LNX.4.44.0303161020480.11736-100000@grace.speakeasy.n et>
2003-03-17  5:08                           ` Chris Hecker
2003-03-17 17:06                             ` brogoff
2003-03-17 19:01                               ` Ville-Pertti Keinonen
     [not found]                             ` <Pine.LNX.4.44.0303170836240.29039-100000@grace.speakeasy.n et>
2003-03-17 19:33                               ` Chris Hecker
2003-03-17 20:28                                 ` brogoff
     [not found]                                 ` <Pine.LNX.4.44.0303171145500.29039-100000@grace.speakeasy.n et>
2003-03-17 21:09                                   ` Chris Hecker
2003-03-19  2:34                                 ` [Caml-list] ocamlopt speed (was Re: Module recursion) Chris Hecker
2003-03-19 10:03                                   ` Michal Moskal
2003-03-19 10:38                                     ` Gerd Stolpmann
2003-03-19 20:36                                   ` Chris Hecker
2003-03-17  1:46                     ` [Caml-list] Re: Haskell-like syntax Nicolas Cannasse
2003-03-14 22:50               ` Oleg
2003-03-20 15:01                 ` Andreas Rossberg
2003-03-12 20:46       ` [Caml-list] Monads was OCaml popularity Christophe Raffalli
2003-03-13  0:03       ` [Caml-list] monads for dummies james woodyatt
2003-03-13  4:32         ` Christopher Quinn
2003-03-13 11:53         ` Christian Lindig
2003-03-12 18:59 ` [Caml-list] OCaml popularity Martin Weber
2003-03-12 20:24   ` Xavier Leroy
2003-03-13  8:57     ` [Caml-list] how to interface with integer Bigarrays using camlidl francois bereux
2003-03-13  9:36       ` Xavier Leroy
2003-03-13  0:42   ` [Caml-list] OCaml popularity Graham Guttocks

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=3E6E131C.2040804@univ-savoie.fr \
    --to=christophe.raffalli@univ-savoie.fr \
    --cc=caml-list@inria.fr \
    --cc=gmarceau@cs.brown.edu \
    /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;
as well as URLs for NNTP newsgroup(s).