proc fs {f s} { set r {} foreach n $s { lappend r [{*}$f $n] } return $r } proc f1 x {expr {$x * 2}} proc f2 x {expr {$x ** 2}} set fsf1 [partial fs f1] set fsf2 [partial fs f2] foreach s {{0 1 2 3} {2 4 6 8}} { puts "$s ==f1==> [$fsf1 $s]" puts "$s ==f2==> [$fsf2 $s]" }