find.cpp 383 B

1234567891011121314151617181920212223242526272829
  1. // returns 1 if expr p contains expr q, otherweise returns 0
  2. #include "stdafx.h"
  3. #include "defs.h"
  4. int
  5. find(U *p, U *q)
  6. {
  7. int i;
  8. if (equal(p, q))
  9. return 1;
  10. if (istensor(p)) {
  11. for (i = 0; i < p->u.tensor->nelem; i++)
  12. if (find(p->u.tensor->elem[i], q))
  13. return 1;
  14. return 0;
  15. }
  16. while (iscons(p)) {
  17. if (find(car(p), q))
  18. return 1;
  19. p = cdr(p);
  20. }
  21. return 0;
  22. }