In article <20020402043641.5E1F6783 / helium.ruby-lang.org>,
  "K.Kosako" <kosako / sofnec.co.jp> writes:

> 全部の組み合わせを考えた結果、
> (?:a+)?, (?:a*)??, (?:a+)??の三個が意味のある組み合わせだと思います。

In article <20020402044204.239DF783 / helium.ruby-lang.org>,
  "K.Kosako" <kosako / sofnec.co.jp> writes:

> (?:a+?)?もありました。

ふむ。(?:a+)? は a* と同じでは?

あと、(?:a*)?? と (?:a+)?? は同じでは?
これは最後の一回が多いぶん (?:a*)?? のほうが効率が悪いという違いはあり
ますけれど。

> 他の組み合わせは、
>   組み合わせても意味が変わらない
>   意味は変わるが、もっと効率のよい書き方がある
> のどちらかになると思います。

? が「中身が 0回というのを最後にためす」ものであり、
?? が「中身が 0回というのを最初にためす」ものなので、
* や *? と組み合わせても冗長になるんじゃないかと思います。
つまり、後の 0回の試行は無駄なわけで、?, ?? を消すか、*, *? を +, +?
に取り替えるか、どちらかによって問題なく効率が上昇することになるんじゃ
ないかというわけです。

各オペレータに対して繰り返し回数の列を変換する関数を定義して、ある列の
集合がそれらの関数に対して閉じているがことを示せばいいのかなぁ?

文字列が有限だから数列は有限? それとも空列へのマッチを考えると無限にな
る?

そういや空列にマッチした時に無理矢理進める挙動はこの話とは関係してくる
のだろうか...
-- 
[田中 哲][たなか あきら][Tanaka Akira]
「ふえろ! わかめちゃん作戦です$(C⊇」(Little Worker, 桂遊生丸)