2025 Chegou
Há 2 semanas
As sombras da programação
[update]
Roubar a explicação não… roubei o exemplo. Para a explicação deixei o apontador para o artigo na Wikipédia – mais preguiçoso ainda!
[/update]
(map (lambda (x) (/ 1 x)) *list*)
#'apply
e #'+
:(apply +
(map (lambda (x) (/ 1 x)) *list*))
(length *list*)
(define harmonic-mean
(lambda (*list*)
(/
(length *list*)
(apply +
(map (lambda (x) (/ 1 x)) *list*)))))
(let ((params '(40 60)))
(display (harmonic-mean params))
(newline))
[update]
Ainda esperando o pessoal do Prettify corrigir o syntax highlighting para LISP.
[/update]
[math:pow(Xi - Xm, 2) || Xi <- List]
math:pow/2
) das diferenças entre cada elemento (Xi
) da lista (Xi <- List
) e sua média (Xm
, calculado anteriormente).math:sum/1
para gerar um somatório e retorna a divisão do resultado do somatório pelo tamanho da lista menos um (Num / Demon
).#'map
roda a função anónima (lambda) em cada elemento, extraindo os quadrados dos desvios.[update]
Troquei o link para map/reduce, que apontava para um arcabouço do Google, quando as referências reais seriam encontradas no segundo parágrafo do texto referenciado.
[/update]
(lambda (x) (expt (- x xm) 2))
em LISP.#'apply
) é usado somatório (#'+
), aplicado ao conjunto resultante.variance(List) ->
Xm = mean(List),
Num = lists:sum([math:pow(Xi - Xm, 2) || Xi <- List]),
Denom = length(List) - 1,
Num / Denom.
mean/1
:mean(List) ->
lists:sum(List) / length(List).
(define variance
(lambda (*list*)
(let ((xm (mean *list*)))
(/
(apply +
(map (lambda (x) (expt (- x xm) 2)) *list*))
(- (length *list*) 1)))))
(define mean
(lambda (*list*)
(/
(apply + *list*)
(length *list*))))
double variance(int length, double *list) {
double x_mean = mean(length, list);
double sum = 0;
int i;
for (i=0; i<length; ++i)
sum += pow(list[i] - x_mean, 2.);
return sum / (length - 1);
}
math.h
. Segue a implementação da função mean()
:double mean(int length, double *list) {
double sum = 0;
int i;
for (i=0; i<length; ++i)
sum += list[i];
return sum / length;
}