UNPKG

1.39 kBtext/coffeescriptView Raw
1# returns 1 if expr p contains expr q, otherweise returns 0
2
3
4
5Find = (p, q) ->
6
7 i = 0
8 if (equal(p, q))
9 return 1
10
11 if (istensor(p))
12 for i in [0...p.tensor.nelem]
13 if (Find(p.tensor.elem[i], q))
14 return 1
15 return 0
16
17 while (iscons(p))
18 if (Find(car(p), q))
19 return 1
20 p = cdr(p)
21
22 return 0
23
24# find stuff like (-1)^(something (but disregard
25# imaginary units which are in the form (-1)^(1/2))
26findPossibleClockForm = (p) ->
27
28 i = 0
29
30 if isimaginaryunit(p)
31 return 0
32
33 if (car(p) == symbol(POWER) and !isinteger(caddr(p1)))
34 if Find(cadr(p), imaginaryunit)
35 #console.log "found i^fraction " + p
36 return 1
37
38 if (car(p) == symbol(POWER) && equaln(cadr(p), -1) && !isinteger(caddr(p1)))
39 #console.log "found -1^fraction in " + p
40 return 1
41
42 if (istensor(p))
43 for i in [0...p.tensor.nelem]
44 if (findPossibleClockForm(p.tensor.elem[i]))
45 return 1
46 return 0
47
48 while (iscons(p))
49 if (findPossibleClockForm(car(p)))
50 return 1
51 p = cdr(p)
52
53 return 0
54
55# find stuff like (e)^(i something)
56findPossibleExponentialForm = (p) ->
57
58 i = 0
59
60 if car(p) == symbol(POWER) && cadr(p)== symbol(E)
61 return Find(caddr(p),imaginaryunit)
62
63 if (istensor(p))
64 for i in [0...p.tensor.nelem]
65 if (findPossibleExponentialForm(p.tensor.elem[i]))
66 return 1
67 return 0
68
69 while (iscons(p))
70 if (findPossibleExponentialForm(car(p)))
71 return 1
72 p = cdr(p)
73
74 return 0
75
76$.Find = Find
\No newline at end of file