quinta-feira, 4 de setembro de 2008

Faça o "J"

Em tempos de programação orientada a objetos, documentação no próprio código e outras boas práticas que nos evita o código-macarrão, eis que vejo um livro chamado "J para quem conhece C".

Até aí, para quem vê o C pela primeira vez o acha bizarro, quando se vê então um código propositalmente obscuro, nem se fala. Agora, este tal de J é sacanagem!

Vejamos o mesmo programa em duas versões. Em C:

// Program to calculate Chebyshev coefficients
// Code taken from Numerical Recipes in C 1/e
#include <math.h>
#define PI 3.141592653589793
void chebft(a,b,c,n,func)
float a,b,c[];
float (*func)();
int n;
{
int k,j;
float fac,bpa,bma,f[300];
bma = 0.5 * (b-a)
bpa = 0.5 * (b+a)
for(k = 0;k<n;k++) {
float y = cos(PI*(k+0.5)/n);
f[k] = (*func)(y*bma+bpa);
}
fac = 2.0/n;
for (j = 0;j<n;j++) {
double sum = 0.0;
for(k = 0;k<n;k++)
sum += f[k] * cos(PI*j*(k+0.5)/n);
c[j] = fac*sum;
}
}

Em J:

chebft =: adverb define
:
f =. u. 0.5 * (+/y.) - (-/y.) * 2 o. o. (0.5 + i. x.) % x.
(2 % x.) * +/ f * 2 o. o. (0.5 + i. x.) *"0 1 (i. x.) % x.
)

Um comentário: