Posted to tcl by kbk at Thu Nov 30 16:34:47 GMT 2017view raw

  1. # [lfoldl] that's analogous to [lmap]
  2. proc lfoldl {vars init list code} {
  3. lassign $vars lvar rvar
  4. upvar 1 $lvar l $rvar r
  5. set l $init
  6. foreach r $list {
  7. # need some catch gubbins here
  8. set l [uplevel 1 $code]
  9. }
  10. return $l
  11. }
  12.  
  13. set l {1 2 2 2 2 3 3 3 3 3 3 4 4 4 4 5}
  14. set n [llength $l]
  15. set sum [lfoldl {p q} 0.0 $l {expr {$p + $q}}]
  16. set mean [expr {$sum/$n}]
  17. set ss [lfoldl {p q} 0 $l {expr {$p + ($q - $mean)**2}}]
  18. set stdev [expr {sqrt($ss / ($n-1))}]
  19. puts "mean $mean standard deviation $stdev"