暴力求解算法
fun parenMatch (parens : paren seq) : bool =
let
fun pm ((NONE, _) | (SOME 0, CPAREN)) = NONE
| pm (SOME c, CPAREN) = SOME (c-1)
| pm (SOME c, OPAREN) = SOME (c+1)
in
iter pm (SOME 0) parens = (SOME 0)
end
fun parenDist (parens : paren seq) : int option =
let
val n = Seq.length parens
fun myBF(i,j,max) = case (parenMatch (Seq.subseq parens (i,j))) of
false => if i = n-1 then NONE
else if j<n-i then myBF(i,j+1,max)
else myBF(i+1,1,max)
|true => if j=n-i then Option210.intMax(max,SOME(j-2))
else myBF(i+j,1,Option210.intMax(max,SOME(j-2)))
in
if parenMatch parens then myBF(0,1,NONE)
else NONE
end