int main()
{
    ARY_TP arr[ARY_SZ]; /* = { 0 }; */
    /* print before initialization */
    print_array(arr);

    /* set all to 1 and print */
    set_ones(arr);
    print_array(arr);

    multiply_all(arr, 2);
    print_array(arr);

    /* set all to a sequence and print */
    set_sequence(arr);
    print_array(arr);

    multiply_all(arr, 10);
    print_array(arr);

    return 0;
}
Exemple #2
0
void
dproduct(void)
{
    int i, j, n;
    n = length(p1) - 1;
    for (i = 0; i < n; i++) {
        p3 = cdr(p1);
        for (j = 0; j < n; j++) {
            push(car(p3));
            if (i == j) {
                push(p2);
                derivative();
            }
            p3 = cdr(p3);
        }
        multiply_all(n);
    }
    add_all(n);
}
Exemple #3
0
void
trivial_divide(void)
{
	int h;
	if (car(A) == symbol(MULTIPLY)) {
		h = tos;
		p0 = cdr(A);
		while (iscons(p0)) {
			if (!equal(car(p0), F)) {
				push(car(p0));
				eval(); // force expansion of (x+1)^2, f.e.
			}
			p0 = cdr(p0);
		}
		multiply_all(tos - h);
	} else
		push_integer(1);
	T = pop();
}
void
distill_product(void)
{
	int h;

	// distill factors involving x

	p3 = cdr(p1);

	while (iscons(p3)) {
		if (find(car(p3), p2)) {
			push(car(p3));
			push(p2);
			distill();
		}
		p3 = cdr(p3);
	}

	// multiply together all constant factors

	h = tos;

	p3 = cdr(p1);

	while (iscons(p3)) {
		if (find(car(p3), p2) == 0)
			push(car(p3));
		p3 = cdr(p3);
	}

	if (tos - h) {
		multiply_all(tos - h);
		//p3 = pop();	// may need later for pushing both +a, -a
		//push(p3);
		//push(p3);
		//negate();
	}
}
Exemple #5
0
void
absval(void)
{
	int h;
	save();
	p1 = pop();

	if (istensor(p1)) {
		absval_tensor();
		restore();
		return;
	}

	if (isnum(p1)) {
		push(p1);
		if (isnegativenumber(p1))
			negate();
		restore();
		return;
	}

	if (iscomplexnumber(p1)) {
		push(p1);
		push(p1);
		conjugate();
		multiply();
		push_rational(1, 2);
		power();
		restore();
		return;
	}

	// abs(1/a) evaluates to 1/abs(a)

	if (car(p1) == symbol(POWER) && isnegativeterm(caddr(p1))) {
		push(p1);
		reciprocate();
		absval();
		reciprocate();
		restore();
		return;
	}

	// abs(a*b) evaluates to abs(a)*abs(b)

	if (car(p1) == symbol(MULTIPLY)) {
		h = tos;
		p1 = cdr(p1);
		while (iscons(p1)) {
			push(car(p1));
			absval();
			p1 = cdr(p1);
		}
		multiply_all(tos - h);
		restore();
		return;
	}

	if (isnegativeterm(p1) || (car(p1) == symbol(ADD) && isnegativeterm(cadr(p1)))) {
		push(p1);
		negate();
		p1 = pop();
	}

	push_symbol(ABS);
	push(p1);
	list(2);

	restore();
}