caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: Pippijn van Steenhoven <pip88nl@gmail.com>
To: caml-list@inria.fr
Subject: Re: [Caml-list] Clarification for the configuration of comparison functions
Date: Wed, 10 Sep 2014 13:41:01 +0100	[thread overview]
Message-ID: <20140910124101.GA30231@xinutec.org> (raw)
In-Reply-To: <1410351988.3003.19.camel@thinkpad>

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

On Wed, Sep 10, 2014 at 02:26:28PM +0200, Gerd Stolpmann wrote:
> type t = ...
> type t_cmp = t * int
> 
> let wrap x = (x, Hashtbl.hash x)
> 
> let my_compare (x1,h1) (x2,h2) =
>   if h1=h2 then
>     compare x1 x2
>   else
>     h1-h2

This code is incorrect when h1 is large and negative. You should use
"compare h1 h2" and annotate h1 and/or h2 with its type (int), so that
int-compare is called directly.

Also, if you store the hash before the actual value, compare will
probably stop comparing after it finds that the hashes are not equal, so
you can simply use the polymorphic compare on t_cmp. I don't know this
for sure, since I haven't looked at the source, but I would assume this
is true.

-- 
Pippijn

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

  parent reply	other threads:[~2014-09-10 12:41 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-09-10  8:56 SF Markus Elfring
2014-09-10 11:27 ` Gerd Stolpmann
2014-09-10 12:07   ` Yotam Barnoy
2014-09-10 12:26     ` Gerd Stolpmann
2014-09-10 12:37       ` Adrien Nader
2014-09-10 12:38         ` Yotam Barnoy
2014-09-10 12:41       ` Pippijn van Steenhoven [this message]
2014-09-10 12:51         ` Gerd Stolpmann
2014-09-10 12:56           ` Ben Millwood
     [not found]       ` <CAADdkeKquMWyHjQhgd2SOZYr9DaS2E+i3Ug5=xb25BK-+n16eQ@mail.gmail.com>
2014-09-10 12:44         ` Gerd Stolpmann
2014-09-10 20:56   ` SF Markus Elfring
2014-09-11  7:46     ` Francois Berenger
2014-09-11  8:10       ` SF Markus Elfring
2014-09-11  8:24         ` Francois Berenger
2014-09-11  8:33           ` SF Markus Elfring
2014-09-11  8:39             ` Frédéric Bour
2014-10-06 20:50               ` SF Markus Elfring

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=20140910124101.GA30231@xinutec.org \
    --to=pip88nl@gmail.com \
    --cc=caml-list@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;
as well as URLs for NNTP newsgroup(s).