Lisp Bracket
(defun bracket (s)
(let ((stack '()))
(loop for v across s
do (cond
((char= v #\))
(if (or (null stack) (char/= (pop stack) #\())
(return-from bracket 0)))
((char= v #\])
(if (or (null stack) (char/= (pop stack) #\[))
(return-from bracket 0)))
((char= v #\})
(if (or (null stack) (char/= (pop stack) #\{))
(return-from bracket 0)))
(t (push v stack))))
(if (null stack) 1 0)))
This uses a simple stack approach: open brackets go in, matching closing brackets pop them out.