CMcC 2008Sep1 was looking for a way to represent a hierarchy of key/value pairs with wildcard matching.
The following proc searches for probe in the dict args, with the additional feature that each dict key may be a glob string or a list of keys. Thus [dict_probe {fred daughter} {f* wilma} {daughter pebbles} {barney} {son bambam}}] -> pebbles
proc dict_probe {probe args} { if {[llength $args] == 1} { set args [lindex $args 0] } while {[llength $args] > 1 && [llength $probe] > 0} { # we still have a dict to search and a probe to find foreach {key val} $args { set found 0 set p [lindex $probe 0] ;# next probe element # probe each element of key foreach m $key { if {[string match $m $p]} { # found a matching element if {[llength $probe] == 1} { # finished the probe return [list $probe $val] } else { # repeat search at next level set probe [lrange $probe 1 end] set args $val ;# probe this dict element set found 1 break } } if {$found} break } if {$found} break } } return [list $probe $args] }
DKF: I don't understand what it is doing, but here's how to plumb it into dict:
set map [namespace ensemble configure dict -map] dict set map probe [list [namespace which dict_probe]] namespace ensemble configure dict -map $map
See dict.