Posted to tcl by CecilWesterhof at Tue Jul 24 16:47:46 GMT 2018view raw
- 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?