Balanced brackets: Difference between revisions
Content added Content deleted
(→{{header|Haskell}}: added automaton solution) |
|||
Line 3,157: | Line 3,157: | ||
=={{header|Haskell}}== |
=={{header|Haskell}}== |
||
The simplest solution exploits the idea of stack-based automaton, which could be implemented by a fold. |
|||
<lang haskell> |
|||
isMatching :: String -> Bool |
|||
isMatching = null . foldl aut [] |
|||
where |
|||
aut ('[':s) ']' = s |
|||
-- aut ('{':s) '}' = s -- automaton could be extended |
|||
aut s x = x:s |
|||
</lang> |
|||
This generates an infinite stream of correct balanced brackets expressions: |
|||
<lang haskell> |
|||
brackets = filter isMatching |
|||
$ [1.. ] >>= (`replicateM` "[]{}") |
|||
</lang> |
|||
In case the index of unmatched opening bracket is need to be found, following solution is suitable. |
|||
<lang haskell> |
<lang haskell> |
||
import Control.Monad |
import Control.Monad |