Lisp is notorious for using lots and lots of parentheses.
I have shown that: If the algorithm has reported that the sequence is correct, it is correct. This two points imply that this algorithm works for all possible inputs. At the end lines 19—22as long as the expression is balanced and the stack has been completely cleaned off, the string represents a correctly balanced sequence of parentheses.
Also, the first opening symbol processed may have to wait until the very last symbol for its match. If it is not, report an error.
If the current char is an opening bracket, just push it to the stack. Number of lines are less and easy to understand. Note also in line 15 that pop simply removes a symbol from the stack.
Then for each corresponding test case we, call a function named balanced parentheses. Whenever it comes across a closing bracket, the top element of the stack is deleted or popped i.
Thus, it is not a correct sequence. If it has reported an error: If the stack was not empty in the end, the balance of opening and closing brackets is not zero.
If there was a wrong element on top of the stack, a pair of "wrong" brackets should match each other.