atomize.cpp 433 B

1234567891011121314151617181920212223242526272829303132333435
  1. #include "stdafx.h"
  2. #include "defs.h"
  3. void
  4. eval_atomize(void)
  5. {
  6. push(cadr(p1));
  7. eval();
  8. p1 = pop();
  9. if (iscons(p1))
  10. atomize();
  11. else
  12. push(p1);
  13. }
  14. void
  15. atomize(void)
  16. {
  17. int i, n;
  18. p1 = cdr(p1);
  19. n = length(p1);
  20. if (n == 1) {
  21. push(car(p1));
  22. return;
  23. }
  24. p2 = alloc_tensor(n);
  25. p2->u.tensor->ndim = 1;
  26. p2->u.tensor->dim[0] = n;
  27. for (i = 0; i < n; i++) {
  28. p2->u.tensor->elem[i] = car(p1);
  29. p1 = cdr(p1);
  30. }
  31. push(p2);
  32. }