From: eijiro_sumii@anet.ne.jp
To: checker@d6.com
Cc: caml-list@inria.fr, gerd@gerd-stolpmann.de,
sumii@venus.is.s.u-tokyo.ac.jp
Subject: Re: substring match like "strstr"
Date: Thu, 14 Dec 2000 12:36:35 +0900 [thread overview]
Message-ID: <20001214123635H.sumii@yl.is.s.u-tokyo.ac.jp> (raw)
In-Reply-To: <4.3.2.7.2.20001211103237.00c12100@shell16.ba.best.com>
> Okay, I'm curious, so I'll port the code to caml and include it
> below as well (as practice for myself). Can you try it in your test
> harness?
I tried the optimized version of the imperative strstr, along with an
optimized version of the functional strstr (attached at the end). The
results (on the SPARC machine) were:
strstr_imp2 90.57
strstr_fun2 89.64
C strstr 53.76
So the imperative version and the functional version were comparable,
though both were slower than the C version. My guess is that they
actually compile into rather similar code, because all recursive calls
are in tail positions.
Anyway, for my application, the libc version seems the most reasonable
choice, as far as I use a strstr-like function at all...
// Eijiro Sumii (http://www.yl.is.s.u-tokyo.ac.jp/~sumii/)
//
// Ph.D. Student at Department of IS, University of Tokyo
// Visiting Scholar at Department of CIS, University of Pennsylvania
let strstr_fun2 pat str =
let patlim = String.length pat - 1 in
let strlim = String.length str - 1 in
let rec sub patpos strpos =
(* compare pat[0..patpos] and str[(strpos-patpos)..strpos] *)
if patpos < 0 then true else
if pat.[patpos] <> str.[strpos] then false else
sub (patpos - 1) (strpos - 1) in
let rec search strpos =
(* compare pat[0..patlim] and str[(strpos-patlim)..strpos] *)
if strpos > strlim then raise Not_found else
if sub patlim strpos then strpos - patlim else
search (strpos + 1) in
search patlim
;;
next prev parent reply other threads:[~2000-12-14 18:28 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2000-12-08 6:04 eijiro_sumii
2000-12-08 12:57 ` Gerd Stolpmann
2000-12-10 13:16 ` eijiro_sumii
2000-12-10 15:39 ` Gerd Stolpmann
2000-12-11 3:57 ` eijiro_sumii
2000-12-12 13:58 ` Julian Assange
2000-12-11 21:07 ` Chris Hecker
2000-12-11 22:22 ` Gerd Stolpmann
2000-12-12 5:06 ` Chris Hecker
2000-12-12 12:28 ` Jean-Christophe Filliatre
2000-12-13 10:02 ` eijiro_sumii
2000-12-13 10:17 ` Eijiro Sumii
2000-12-13 10:53 ` Julian Assange
2000-12-13 13:28 ` Eijiro Sumii
2000-12-12 3:28 ` eijiro_sumii
2000-12-13 1:12 ` John Prevost
2000-12-13 2:35 ` Chris Hecker
2000-12-12 10:07 ` Sven LUTHER
2000-12-14 3:36 ` eijiro_sumii [this message]
2000-12-14 6:48 ` Chris Hecker
2000-12-14 8:02 ` eijiro_sumii
2000-12-14 21:53 ` Stephan Tolksdorf
2000-12-14 21:12 Ruchira Datta
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=20001214123635H.sumii@yl.is.s.u-tokyo.ac.jp \
--to=eijiro_sumii@anet.ne.jp \
--cc=caml-list@inria.fr \
--cc=checker@d6.com \
--cc=gerd@gerd-stolpmann.de \
--cc=sumii@venus.is.s.u-tokyo.ac.jp \
/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).