Posted to tcl by aspect at Mon Oct 20 05:52:02 GMT 2014view pretty
package require lambda proc dict-ref {dict args} { lambda {dict keys args} { switch [llength $args] { 0 { uplevel 1 "dict get \$$dict $keys" } 1 { tailcall dict set $dict {*}$keys $args } default {error "Expected 0 or 1 args"} } } $dict $args } proc foo {d1} { set x1 [dict-ref d1 a b] set x2 [dict-ref d1 x y] puts "x1 is [{*}$x1]" {*}$x1 555 puts "x1 is [{*}$x1]" puts "x2 is [{*}$x2]" {*}$x2 999 puts "x2 is [{*}$x2]" return $d1 } set d {a {b 0 c 0} x {y 1 z 1}} set d [foo $d] puts $d