From: Brian Rogoff <bpr@artisan.com>
To: caml-list@inria.fr
Cc: skaller@ozemail.com.au
Subject: Re: [Caml-list] sorting Hashtbl.t
Date: Thu, 15 Aug 2002 09:43:34 -0700 [thread overview]
Message-ID: <15707.55862.181324.32529@granite.artisan.com> (raw)
In-Reply-To: <3D5AD6CF.7030603@ozemail.com.au>
John Max Skaller writes:
> > From an algorithmic point of view, there is no way to sort an
> > hash table since there is no order attached to items.
[...snip extended Hashtbl interface ...]
> Of course I can write this
> function myself, it's just inconvenient to have to
> keep doing so.
The only thing that really prevents you from doing this just once in a
fairly neat and comfortable way is the restriction on multiple definitions
of the same module name in a given structure or signature, in this case,
Make. Why don't later module names just shadow previous ones, as later
function definitions follow succeeding ones? If this were the case, then we
could handle this problem with something like so
(* exthash.mli -- NOT LEGAL OCaml *)
include Hashtbl
val elements : ('a, 'b) Hashtbl.t -> 'b list
module type S =
sig
include S
val elements : ('a, 'b) Hashtbl.t -> 'b list
end
module Make (H : HashedType) : S with type key = H.t
(* exthash.ml -- NOT LEGAL OCaml *)
include Hashtbl
let elements ht =
let r = ref [] in
(Hashtbl.iter (fun _ y -> r := y::(!r)) ht; !r)
module type S =
sig
include S (* S here refers to Hashtbl.S *)
val elements : ('a, 'b) Hashtbl.t -> 'b list
end
module Ext (H : HashedType) : S with type key = H.t =
struct
module Hashtbl = Make(H)
include Hashtbl
let elements ht =
let r = ref [] in
(Hashtbl.iter (fun _ y -> r := y::(!r)) ht; !r)
end
but because of the restrictions we need to replace those includes with a
manual copying of all of the relevant code from the Hashtbl module.
--
I mean, if 10 years from now, when you are doing something quick and dirty,
you suddenly visualize that I am looking over your shoulders and say to
yourself, 'Dijkstra would not have liked this,' well that would be enough
immortality for me.
Edsger Wybe Dijkstra 1930-2002
-- Brian
-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
next prev parent reply other threads:[~2002-08-15 16:43 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2002-08-12 1:08 Oleg
2002-08-12 9:51 ` Nicolas Cannasse
2002-08-12 13:44 ` Oleg
2002-08-13 7:45 ` Igor I. Harzmann
2002-08-12 10:10 ` Yann Régis-Gianas
2002-08-14 22:16 ` John Max Skaller
2002-08-14 23:13 ` Alexander V.Voinov
2002-08-15 16:43 ` Brian Rogoff [this message]
2002-08-16 17:47 Brian Rogoff
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=15707.55862.181324.32529@granite.artisan.com \
--to=bpr@artisan.com \
--cc=caml-list@inria.fr \
--cc=skaller@ozemail.com.au \
/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