zero.cpp 610 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. #include "stdafx.h"
  2. #include "defs.h"
  3. void
  4. eval_zero(void)
  5. {
  6. int i, k[MAXDIM], m, n;
  7. m = 1;
  8. n = 0;
  9. p2 = cdr(p1);
  10. while (iscons(p2)) {
  11. push(car(p2));
  12. eval();
  13. i = pop_integer();
  14. if (i < 2) {
  15. push(zero);
  16. return;
  17. }
  18. m *= i;
  19. k[n++] = i;
  20. p2 = cdr(p2);
  21. }
  22. if (n == 0) {
  23. push(zero);
  24. return;
  25. }
  26. p1 = alloc_tensor(m);
  27. p1->u.tensor->ndim = n;
  28. for (i = 0; i < n; i++)
  29. p1->u.tensor->dim[i] = k[i];
  30. push(p1);
  31. }
  32. #if SELFTEST
  33. static char *s[] = {
  34. "zero(2,2)",
  35. "((0,0),(0,0))",
  36. "zero(1,1)",
  37. "0",
  38. };
  39. void
  40. test_zero(void)
  41. {
  42. test(__FILE__, s, sizeof s / sizeof (char *));
  43. }
  44. #endif