UNPKG

999 Btext/coffeescriptView Raw
1###
2Remove terms that involve a given symbol or expression. For example...
3
4 filter(x^2 + x + 1, x) => 1
5
6 filter(x^2 + x + 1, x^2) => x + 1
7###
8
9
10
11Eval_filter = ->
12 p1 = cdr(p1)
13 push(car(p1))
14 Eval()
15 p1 = cdr(p1)
16 while (iscons(p1))
17 push(car(p1))
18 Eval()
19 filter()
20 p1 = cdr(p1)
21
22###
23 For example...
24
25 push(F)
26 push(X)
27 filter()
28 F = pop()
29###
30
31filter = ->
32 save()
33 p2 = pop()
34 p1 = pop()
35 filter_main()
36 restore()
37
38filter_main = ->
39 if (car(p1) == symbol(ADD))
40 filter_sum()
41 else if (istensor(p1))
42 filter_tensor()
43 else if (Find(p1, p2))
44 push_integer(0)
45 else
46 push(p1)
47
48filter_sum = ->
49 push_integer(0)
50 p1 = cdr(p1)
51 while (iscons(p1))
52 push(car(p1))
53 push(p2)
54 filter()
55 add()
56 p1 = cdr(p1)
57
58filter_tensor = ->
59 i = 0
60 n = 0
61 n = p1.tensor.nelem
62 p3 = alloc_tensor(n)
63 p3.tensor.ndim = p1.tensor.ndim
64 for i in [0...p1.tensor.ndim]
65 p3.tensor.dim[i] = p1.tensor.dim[i]
66 for i in [0...n]
67 push(p1.tensor.elem[i])
68 push(p2)
69 filter()
70 p3.tensor.elem[i] = pop()
71 push(p3)