On Dec 11, 2008, at 13:41 , Xah Lee wrote:

On Dec 10, 2:47 pm, John W Kennedy <jwke...@attglobal.net> wrote:
Xah Lee wrote:
In lisp, python, perl, etc, you'll have 10 or so lines. In C or Java,
you'll have 50 or hundreds lines.

C:

#include <stdlib.h>
#include <math.h>

void normal(int dim, float* x, float* a) {
    float sum = 0.0f;
    int i;
    float divisor;
    for (i = 0; i < dim; ++i) sum += x[i] * x[i];
    divisor = sqrt(sum);
    for (i = 0; i < dim; ++i) a[i] = x[i]/divisor;

}

i don't have experience coding C. The code above doesn't seems to
satisfy the spec. The input should be just a vector, array, list, or
whatever the lang supports.
The output is the same datatype of the same dimension.



This does satisfy it, depending on what you mean by "return". In C it is more common to do in-place assignment of pointers, rather than return values. So in the code above

float *x  is a list, if you will, of floats
float *a  is a list also
dim is the length of the list

it assumes that the outside code has already allocated the space for a and x. Instead of returning "a", it modifies the list in place. (for C purists, I know it's not a list, but that's just a convenient term).

Also, for python, I wouldn't choose to code it in one line, when 2 is clearer:

def normal(x):

    square=sqrt(sum([val**2 for val in x]))
    return [val/square for val in x]

or, as others have pointed out, for numerical work I'd just use numpy:

from numpy import *

def normal(x):
   return x/sqrt(x.sum())

or something like that.


                                bb




--
Brian Blais
bbl...@bryant.edu
http://web.bryant.edu/~bblais



--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to