[Richard Suchenwirth] 2004-05-09 - Functions in Tcl are typically written with the [proc] command. But I notice more and more that, on my way to [functional programming], my proc bodies are a single call to [expr] which does all the rest. So what about a thin abstraction around this recurring pattern? proc func {name argl body} {proc $name $argl [list expr $body]} (Might have called it ''fun'' as well... it sure is.) That's all. But to not make the page look so empty, here's some examples for ''func'' uses: func fac n {$n<2? 1: [fac [incr n -1]]} func sgn x {($x>0)-($x<0)} ;# courtesy rmax func gcd {u v} {$u? [gcd [expr $v%$u] $u]: $v} Pity we have to make [expr] explicit again, in nested calls... But ''func isn't limited to math functions (which, especially when recursive, come out nice), but for [expr] uses in testing as well: func empty list {[llength $list]==0} func in {list element} {[lsearch -exact $list $element]<0} ---- [Arts and crafts of Tcl-Tk programming]