Posted to tcl by kbk at Thu Nov 30 16:34:47 GMT 2017view pretty
# [lfoldl] that's analogous to [lmap]
proc lfoldl {vars init list code} {
lassign $vars lvar rvar
upvar 1 $lvar l $rvar r
set l $init
foreach r $list {
# need some catch gubbins here
set l [uplevel 1 $code]
}
return $l
}
set l {1 2 2 2 2 3 3 3 3 3 3 4 4 4 4 5}
set n [llength $l]
set sum [lfoldl {p q} 0.0 $l {expr {$p + $q}}]
set mean [expr {$sum/$n}]
set ss [lfoldl {p q} 0 $l {expr {$p + ($q - $mean)**2}}]
set stdev [expr {sqrt($ss / ($n-1))}]
puts "mean $mean standard deviation $stdev"