OCaml の標準ライブラリにはなぜ文字列内の文字列を探す関数がないのか? C にだって、char * strstr(const char *haystack, const char *needle) という関数があって、haystack(藁の山)から needle(針)を探し出してくれるのに、、、おかしいよ、変だよ。 おかしいか?変か? まあ、おかしいかもしれないね。 でも理由がないわけじゃない。文字列サーチは使われる状況によって、効率のよい書き方が異なるからだ。 そもそも検索回数、needle, haystack の長さすべてが小さければ、無理やり頭から探す C の strstr と同じ方式が手っ取り早い。 同じ needle を膨大な種類の haystack から見つけ出す場合、正規表現がよい。 一回毎に needle が違う場合は、一つ一つの needle に対応する正規表現を作る