truth
Há 3 meses
As sombras da programação
Já que falávamos de variâncias e médias, um dos cálculos mais belos de média é a média harmónica.[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]
Este artigo dá seguimento ao artigo sobre variância amostral.[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.
Uma das operações mais importantes e necessárias da matemática é a variância de amostra. É usada, por exemplo, para o cálculo do desvio padrão e da regressão linear.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;
}
Outro dia procurando por um bom interpretador/compilador para R⁶RS, encontrei algo muito mais interessante…#!r4rs#!r5rs#!r6rs#lang racket[update 2011-10-18]
Um script R⁶RS começa sempre com umimport, por exemplo:#!r6rs
(import (rnrs))
Você pode ter as funções de R⁶RS em um código Racket (PLT), basta usar:#lang racket
(require rnrs)
O módulornrstraz toda a funcionalidade de R⁶RS.
Outra coisa legal da linguagem Racket é que, em vez delambda, você pode usarλ(⌘\ / C-\).
[/update]
#lang planet jaymccarthy/c~/.racketrc o seguinte conteúdo:#lang racket
(require (planet jaymccarthy/c:1:2))> (require (planet "main.rkt" ("jaymccarthy" "c.plt" 1 2)))[update 2011-10-18]
Eu acho que você não precise instalar o módulo, basta colocar sua chamada em~/.racketrce, na primeira execução, o módulo será automaticamente baixado e instalado.
Só não posso afirmar com certeza porque eu já havia instalado ele antes.
No Windows, o arquivo éracketrc.rktle deve ficar no diretório de perfil do usuário.
[/update]
> (require (planet orseau/mred-designer:3:7))alias):bash$ gracket -e '(require (planet orseau/mred-designer:3:7))'[update 2011-10-19]
Troquei os nomes dos widgets pelos nomes usados no código Racket.
[/update]
project-XXX.frame%.frame% (frame-XXXX) sob o projeto.frame% que apareceu e repare que a janela Properties mudou.Frame) para Olá Mundo! e clique em Save & Update Preview.frame% selecionado, na janela MrEd Designer, na seção Controls, clique no primeiro botão, message%. Repare que surgiu um elemento message% (message-XXXX) na hieraquia, sob o frame%.Olá Mundo!.frame% em Hierarchy e, em MrEd Designer → Controls, clique no segundo botão, button%.button% (button-XXXX) sob o frame%. Selecione-o.Ok e a fonte para Arial 14. Clique em Save & Update Preview.ola.ola.ss no mesmo diretório onde você salvou o projeto.ola.*.med (o projeto) e ola.ss (o código).ola.ss no DrRacket:bash$ drracket ola.ss(button-XXXX-callback (lambda (button control-event) (void))))XXXX é uma sequência de dígitos decimais.(button-XXXX-callback (lambda (button control-event) (displayln "Olá Mundo!"))));;; Call (project-XXX-init) with optional arguments to this module(project-XXX-init)bash$ gracket ola.ss#!/usr/bin/env gracketbzlib, Plan9, JSON, etc.No mesmo mês em que morreu o mago da distorção da realidade, também nos deixa Dennis Ritchie, criador das linguagens de programação B (baseada em APL) e C e cocriador do sistema operacional UNIX.
Se Steve Jobs esteve envolvido direta ou indiretamente com cada avanço tecnológico que não fosse voltado para resolver problemas da própria máquina, salvo raríssimas exceções, Dennis Ritchie foi o criador da linguagem de programação – e dos conceitos envolvidos – usada como base para quase todas as linguagens modernas, além de ter participado ativa e diretamente da criação do sistema operacional que serve de base para todos os sistemas atuais que funcionam.
A parte mais triste é ver todo o bafafá em cima do falecimento de Jobs, mas nada se fala de Ritchie, tão importante quanto. Ou pior… vi programadores que não sabem quem foi Dennis Ritchie!
Como eu disse, um programador que não conheça Dennis Ritchie, Dijkstra e Knuth precisa mudar de profissão ou tomar muita porrada.
Reza a lenda que um código bem testado é um código sem bugs.bash$ nosetests
..............................
----------------------------------------------------------------------
Ran 30 tests in 0.013s
OKbash$ python
Python 2.6.1 (r261:67515, Jun 24 2010, 21:47:49)
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from sqr import sqr
>>> sqr(16) # 4
7
>>> sqr(25) # 5
7
>>> sqr(144) # 12
45
>>> sqr(225) # 15
27
>>> sqr(256) # 16
58# coding: UTF-8
from math import ceil
__all__ = ['sqr']
def sqr(num):
d = 10 ** int(ceil(len(str(num)) / 2.))
return (num % d) + (num // d)from sqr import sqrfrom math import sqrt as sqr