Posted to tcl by CecilWesterhof at Tue Jul 24 16:47:46 GMT 2018view pretty
I have the following code: proc balancedBrackets {string brackets} { if {[expr {[string length $string] % 2}]} { return 0 } set closeBrackets [dict values ${brackets}] set stack {} foreach ch [split ${string} {}] { if {[dict exists ${brackets} ${ch}]} { lappend stack [dict get ${brackets} ${ch}] puts "push: ${ch}" } elseif {[lsearch ${closeBrackets} ${ch}]} { if {[lindex ${stack} end] ne ${ch}} { puts "Wrong value: #${stack}#${ch}#" return 0 } set stack [lrange ${stack} 0 end-1] puts "pop: ${ch}" } else { error "Wrong character: ${ch}" } } return [expr {[llength ${stack}] == 0}] } I set brackets with: set brackets [dict create \{ \} \[ \] \( \)] The following works without a problem: puts [balancedBrackets "()" ${brackets}] puts [balancedBrackets "\[]" ${brackets}] They give: push: ( pop: ) and: push: [ pop: ] But when I try: puts [balancedBrackets "{}" ${brackets}] I get: push: { Wrong character: } What am I doing wrong?