Erlang Bracket
-module(bracket).
-export([bracket/1]).
bracket(S) ->
case close_stack(S, []) of
[] -> 1;
_ -> 0
end.
close_stack([], Stack) -> Stack;
close_stack([$( | T], Stack) -> close_stack(T, [$( | Stack]);
close_stack([$[ | T], Stack) -> close_stack(T, [$[ | Stack]);
close_stack([${ | T], Stack) -> close_stack(T, [${ | Stack]);
close_stack([$) | T], [$( | Stack1]) -> close_stack(T, Stack1);
close_stack([$] | T], [$[ | Stack1]) -> close_stack(T, Stack1);
close_stack([$} | T], [${ | Stack1]) -> close_stack(T, Stack1);
close_stack([$) | _], _) -> error;
close_stack([$] | _], _) -> error;
close_stack([$} | _], _) -> error;
close_stack([_ | T], Stack) -> close_stack(T, Stack).
This uses a simple stack approach: open brackets go in, matching closing brackets pop them out.