Posted to tcl by CecilWesterhof at Tue Jul 24 16:47:46 GMT 2018view raw

  1. I have the following code:
  2. proc balancedBrackets {string brackets} {
  3. if {[expr {[string length $string] % 2}]} {
  4. return 0
  5. }
  6. set closeBrackets [dict values ${brackets}]
  7. set stack {}
  8.  
  9. foreach ch [split ${string} {}] {
  10. if {[dict exists ${brackets} ${ch}]} {
  11. lappend stack [dict get ${brackets} ${ch}]
  12. puts "push: ${ch}"
  13. } elseif {[lsearch ${closeBrackets} ${ch}]} {
  14. if {[lindex ${stack} end] ne ${ch}} {
  15. puts "Wrong value: #${stack}#${ch}#"
  16. return 0
  17. }
  18. set stack [lrange ${stack} 0 end-1]
  19. puts "pop: ${ch}"
  20. } else {
  21. error "Wrong character: ${ch}"
  22. }
  23. }
  24. return [expr {[llength ${stack}] == 0}]
  25. }
  26.  
  27.  
  28. I set brackets with:
  29. set brackets [dict create \{ \} \[ \] \( \)]
  30.  
  31. The following works without a problem:
  32. puts [balancedBrackets "()" ${brackets}]
  33. puts [balancedBrackets "\[]" ${brackets}]
  34.  
  35. They give:
  36. push: (
  37. pop: )
  38.  
  39. and:
  40. push: [
  41. pop: ]
  42.  
  43. But when I try:
  44. puts [balancedBrackets "{}" ${brackets}]
  45.  
  46. I get:
  47. push: {
  48. Wrong character: }
  49.  
  50. What am I doing wrong?