! Copyright (C) 2010 Dmitry Shubin.
! See http://factorcode.org/license.txt for BSD license.
-USING: help.markup help.syntax kernel sequences ;
+USING: boyer-moore.private help.markup help.syntax kernel sequences ;
IN: boyer-moore
HELP: <boyer-moore>
{ $values
- { "pat" sequence } { "bm" object }
+ { "pat" sequence } { "bm" boyer-moore }
}
{ $description
"Given a pattern performs pattern preprocessing and returns "
{ $heading "Summary" }
"The " { $vocab-link "boyer-moore" } " vocabulary "
"implements a Boyer-Moore string search algorithm with "
-"so-called 'strong good suffix shift rule'. Since agorithm is "
+"so-called 'strong good suffix shift rule'. Since algorithm is "
"alphabet-independent it is applicable to searching in any "
"collection that implements " { $links "sequence-protocol" } "."
"Let " { $snippet "n" } " and " { $snippet "m" } " be lengths "
"of the sequences being searched " { $emphasis "in" } " and "
{ $emphasis "for" } " respectively. Then searching runs in "
-{ $snippet "O(n)" } " time in it's worst case using additional "
-{ $snippet "O(m)" } " space. Preprocessing phase runs in "
+{ $snippet "O(n)" } " time in its worst case using additional "
+{ $snippet "O(m)" } " space. The preprocessing phase runs in "
{ $snippet "O(m)" } " time."
;
pat length :> plen
seq length plen - :> lim
from
- [ dup lim <=
- [ seq pat pick plen mismatch?
- [ 2dup + seq nth-unsafe bm do-shift t ] [ f ] if*
- ] [ drop f f ] if
+ [
+ dup lim <=
+ [
+ seq pat pick plen mismatch?
+ [ 2dup + seq nth-unsafe bm do-shift t ] [ f ] if*
+ ] [ drop f f ] if
] loop ; inline
PRIVATE>
r k - 1 + :> b
seq Z Zk' b <
[ Zk' Z push l r ] ! still inside
- [ seq r 1 + seq b [ tail-slice ] 2bi@ lcp :> q
- q b + Z push k q r +
+ [
+ seq r 1 + seq b [ tail-slice ] 2bi@ lcp :> q
+ q b + Z push k q r +
] if ; inline
: (z-value) ( seq Z l r k -- seq Z l r )