[Camllist] pretty printers and format and matrices
[
Home
]
[ Index:
by date

by threads
]
[ Message by date: previous  next ] [ Message in thread: previous  next ] [ Thread: previous  next ]
[ Message by date: previous  next ] [ Message in thread: previous  next ] [ Thread: previous  next ]
Date:   (:) 
From:  Frank Atanassow <franka@c...> 
Subject:  Re: [Camllist] pretty printers and format and matrices 
Pierre Weis wrote (on 140601 21:37 +0200): > On a regular machine this allows to simultaneously open no more than > 4611686018427387903 boxes, which could be large enough to pretty print > a huge source chunk of your programming language source programs. On > the other hand, on my Ipaq handheld this limit is much smaller than > that, namely 1073741823 which may be really short for you. > > If you need more than max_int simultaneously open boxes, you should > rewrite the Format module using the bignumbers facility of > Caml. However, I should admit that you will still be facing another > stupid limit (no more than 2^30 words in a big integer, which means > approximately 9 * 2 ^ 30 decimal digits on a little machine, once more > far far away from infinity). If you really need infinity, I am not aware > of any practical solution in Objective Caml. > > Sorry for this unsatisfactory answer, due to stupid limitations in the > language. Obviously the solution is to rewrite Format so that the box numbers are encoded as Church numerals. Then you can easily represent infinity: let zero = fun z s > z;; let succ n = fun z s > let s' = s () in s' (n z s);; (* unfortunately, etaexpansion needed because of value restriction *) let one = fun z s > succ zero z s;; let two = fun z s > succ one z s;; let three = fun z s > succ two z s;; ... let rec infty = fun z s > let s' = s () in s' (infty z s);; let eq m n = m (fun () let add m n = m n (fun () > succ);; let print_num n = n () (fun () > print_string "1"; fun _ > ());; # print_num one;; 1 : unit = () # print_num (add two three);; 11111 : unit = () # print_num infty;; 111111111111111111111111111111111111111111111111111111111111111111111111 111111111111111111111111111111111111111111111111111111111111111111111111 111111111111111111111111111111111111111111111111111111111111111111111111 11111111111111111111Interrupted. # print_num (succ infty);; 111111111111111111111111111111111111111111111111111111111111111111111111 111111111111111111111111111111111111111111111111111111111111111111111111 111111111111111111111111111111111111111111111111111111111111111111111111 111111111111111111111Interrupted. P.S.: When I started writing this, I thought Pierre's post was in jest. Now I'm not so sure anymore...!  Frank Atanassow, Information & Computing Sciences, Utrecht University Padualaan 14, PO Box 80.089, 3508 TB Utrecht, Netherlands Tel +31 (030) 2533261 Fax +31 (030) 251379  Bug reports: http://caml.inria.fr/bin/camlbugs FAQ: http://caml.inria.fr/FAQ/ To unsubscribe, mail camllistrequest@inria.fr Archives: http://caml.inria.fr