# $Id: moments.pliant,v 1.0 2002/02/08 12:43:00 dada Exp $ # http://dada.perl.it/shootout/ module "/pliant/language/context.pli" module "/pliant/language/stream.pli" module "/pliant/language/stream/pipe.pli" function heapsort n ra arg Int n ; arg_rw Array:Int ra var Int rra var Int i var Int j var Int l := (n\2) + 1 var Int ir := n part heapsort_loop if l>1 l := l - 1 rra := ra:l else rra := ra:ir ra:ir := ra:1 ir := ir - 1 if ir=1 ra:1 := rra leave heapsort_loop i := l j := l*2 while j<=ir if j<ir and ra:j < ra:(j+1) j := j + 1 if rra < ra:j ra:i := ra:j i := j j := j + i else j := ir + 1 ra:i := rra restart heapsort_loop gvar Str line := "" (gvar Stream STDIN) open "handle:0" in gvar Array:Int nums gvar uInt sum := 0 gvar Int i gvar Int n gvar Int mid gvar Float mean gvar Float deviation gvar Float average_deviation := 0 gvar Float standard_deviation := 0 gvar Float variance := 0 gvar Float devpow3 gvar Float skew := 0 gvar Float kurtosis := 0 gvar Float median while (STDIN atend) = false line := STDIN readline i := 0 if(line parse i any) nums += i for i 0 nums:size-1 sum += nums:i n := nums:size mean := sum/n for i 0 nums:size-1 deviation := nums:i - mean average_deviation := average_deviation + (abs deviation) variance := variance + ((abs deviation) ^ 2.0) devpow3 := (abs deviation) ^ 3.0 if deviation < 0 devpow3 := -devpow3 skew := skew + devpow3 kurtosis := kurtosis + ((abs deviation) ^ 4.0) average_deviation := average_deviation / n variance := variance / (n-1) standard_deviation := variance^0.5 if variance <> 0 skew := skew / (n * variance * standard_deviation) kurtosis := kurtosis / (n * variance * variance) - 3.0 heapsort n nums mid := n\2 median := shunt (n%2>0) nums:mid (nums:mid+nums:mid-1)/2 console "n: " n eol console "median: " (string median "fixed 6") eol console "mean: " (string mean "fixed 6") eol console "average_deviation: " (string average_deviation "fixed 6") eol console "standard_deviation: " (string standard_deviation "fixed 6") eol console "variance: " (string variance "fixed 6") eol console "skew: " (string skew "fixed 6") eol console "kurtosis: " (string kurtosis "fixed 6") eol