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"