Posted to tcl by kbk at Tue Jul 28 20:55:49 GMT 2015view raw

  1. proc gensym {} {
  2. variable i
  3. return \#g[incr i]
  4. }
  5. proc makeProc {a} {
  6. set p [gensym]
  7. set v [gensym]
  8. set vfull [namespace current]::storage::$v
  9. namespace eval [namespace current]::storage [list variable $v 0]
  10. proc $p [list b [list a $a]] \
  11. [string map [list @v $vfull] {
  12. expr {$a * [incr @v] * $b}
  13. }]
  14. return $p
  15. }
  16. set fred [makeProc 2]
  17. puts [$fred 3]
  18. puts [$fred 5]
  19. puts [$fred 5]
  20.