12 //tempstr=malloc(strlen(s)+1);
13 p1->u.str=malloc(strlen(s)+1);
14 memcpy(p1->u.str,s,strlen(s)+1);
15 //p1->u.str=(void *)tempstr;
23 stop("out of memory");
27 push_zero_matrix(int i, int j)
29 push(alloc_tensor(i * j));
30 stack[tos - 1]->u.tensor->ndim = 2;
31 stack[tos - 1]->u.tensor->dim[0] = i;
32 stack[tos - 1]->u.tensor->dim[1] = j;
36 push_identity_matrix(int n)
39 push_zero_matrix(n, n);
40 for (i = 0; i < n; i++)
41 stack[tos - 1]->u.tensor->elem[i * n + i] = one;
66 print_lisp(stack[tos - 2]);
67 print_lisp(stack[tos - 1]);
73 if (cmp_expr(p1, p2) == 0)
82 if (cmp_expr(p1, p2) < 0)
100 cmp_expr(U *p1, U *p2)
107 if (p1 == symbol(NIL))
110 if (p2 == symbol(NIL))
113 if (isnum(p1) && isnum(p2))
114 return sign(compare_numbers(p1, p2));
122 if (isstr(p1) && isstr(p2))
123 return sign(strcmp(p1->u.str, p2->u.str));
131 if (issymbol(p1) && issymbol(p2))
132 return sign(strcmp(get_printname(p1), get_printname(p2)));
140 if (istensor(p1) && istensor(p2))
141 return compare_tensors(p1, p2);
149 while (iscons(p1) && iscons(p2)) {
150 n = cmp_expr(car(p1), car(p2));
177 static void unique_f(U *);
186 if (p2 != symbol(NIL))
197 if (p1 == symbol(NIL))
205 if (p2 != symbol(NIL))
214 check_endianess(void)
217 if (((char *) &tmp)[0] == 1 && Y_LITTLE_ENDIAN == 0) {
218 printf("Please change Y_LITTLE_ENDIAN to 1 in defs.h and recompile.\n");
221 if (((char *) &tmp)[0] == 0 && Y_LITTLE_ENDIAN != 0) {
222 printf("Please change Y_LITTLE_ENDIAN to 0 in defs.h and recompile.\n");
262 __cmp(const void *p1, const void *p2)
264 return cmp_expr(*((U **) p1), *((U **) p2));
270 qsort(stack + tos - n, n, sizeof (U *), __cmp);