Eigenmath/zero.cpp

52 lines
610 B
C++

#include "stdafx.h"
#include "defs.h"
void
eval_zero(void)
{
int i, k[MAXDIM], m, n;
m = 1;
n = 0;
p2 = cdr(p1);
while (iscons(p2)) {
push(car(p2));
eval();
i = pop_integer();
if (i < 2) {
push(zero);
return;
}
m *= i;
k[n++] = i;
p2 = cdr(p2);
}
if (n == 0) {
push(zero);
return;
}
p1 = alloc_tensor(m);
p1->u.tensor->ndim = n;
for (i = 0; i < n; i++)
p1->u.tensor->dim[i] = k[i];
push(p1);
}
#if SELFTEST
static char *s[] = {
"zero(2,2)",
"((0,0),(0,0))",
"zero(1,1)",
"0",
};
void
test_zero(void)
{
test(__FILE__, s, sizeof s / sizeof (char *));
}
#endif