UNPKG

979 Btext/coffeescriptView Raw
1#-----------------------------------------------------------------------------
2#
3# Author : philippe.billet@noos.fr
4#
5# Dirac function dirac(x)
6# dirac(-x)=dirac(x)
7# dirac(b-a)=dirac(a-b)
8#-----------------------------------------------------------------------------
9
10
11
12Eval_dirac = ->
13 push(cadr(p1))
14 Eval()
15 dirac()
16
17dirac = ->
18 save()
19 ydirac()
20 restore()
21
22#define p1 p1
23
24ydirac = ->
25
26 p1 = pop()
27
28
29
30 if (isdouble(p1))
31 if (p1.d == 0)
32 push_integer(1)
33 return
34 else
35 push_integer(0)
36 return
37
38 if (isrational(p1))
39 if (MZERO(mmul(p1.q.a,p1.q.b)))
40 push_integer(1)
41 return
42 else
43 push_integer(0)
44 return
45
46
47 if (car(p1) == symbol(POWER))
48 push_symbol(DIRAC)
49 push(cadr(p1))
50 list(2)
51 return
52
53 if (isnegativeterm(p1))
54 push_symbol(DIRAC)
55 push(p1)
56 negate()
57 list(2)
58 return
59
60 if (isnegativeterm(p1) || (car(p1) == symbol(ADD) && isnegativeterm(cadr(p1))))
61 push(p1)
62 negate()
63 p1 = pop()
64
65
66 push_symbol(DIRAC)
67 push(p1)
68 list(2)
69