Version 0 of func

Updated 2004-05-09 16:40:42

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