1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 | Eval_gamma = ->
|
13 | push(cadr(p1))
|
14 | Eval()
|
15 | gamma()
|
16 |
|
17 | gamma = ->
|
18 | save()
|
19 | gammaf()
|
20 | restore()
|
21 |
|
22 | gammaf = ->
|
23 |
|
24 |
|
25 | p1 = pop()
|
26 |
|
27 | if (isrational(p1) && MEQUAL(p1.q.a, 1) && MEQUAL(p1.q.b, 2))
|
28 | if evaluatingAsFloats
|
29 | push_double(Math.PI)
|
30 | else
|
31 | push_symbol(PI)
|
32 | push_rational(1,2)
|
33 | power()
|
34 | return
|
35 |
|
36 | if (isrational(p1) && MEQUAL(p1.q.a, 3) && MEQUAL(p1.q.b, 2))
|
37 | if evaluatingAsFloats
|
38 | push_double(Math.PI)
|
39 | else
|
40 | push_symbol(PI)
|
41 | push_rational(1,2)
|
42 | power()
|
43 | push_rational(1,2)
|
44 | multiply()
|
45 | return
|
46 |
|
47 |
|
48 |
|
49 |
|
50 |
|
51 |
|
52 |
|
53 | if (isnegativeterm(p1))
|
54 | if evaluatingAsFloats
|
55 | push_double(Math.PI)
|
56 | else
|
57 | push_symbol(PI)
|
58 | push_integer(-1)
|
59 | multiply()
|
60 | if evaluatingAsFloats
|
61 | push_double(Math.PI)
|
62 | else
|
63 | push_symbol(PI)
|
64 | push(p1)
|
65 | multiply()
|
66 | sine()
|
67 | push(p1)
|
68 | multiply()
|
69 | push(p1)
|
70 | negate()
|
71 | gamma()
|
72 | multiply()
|
73 | divide()
|
74 | return
|
75 |
|
76 | if (car(p1) == symbol(ADD))
|
77 | gamma_of_sum()
|
78 | return
|
79 |
|
80 |
|
81 | push_symbol(GAMMA)
|
82 | push(p1)
|
83 | list(2)
|
84 | return
|
85 |
|
86 | gamma_of_sum = ->
|
87 | p3 = cdr(p1)
|
88 | if (isrational(car(p3)) && MEQUAL(car(p3).q.a, 1) && MEQUAL(car(p3).q.b, 1))
|
89 | push(cadr(p3))
|
90 | push(cadr(p3))
|
91 | gamma()
|
92 | multiply()
|
93 | else
|
94 | if (isrational(car(p3)) && MEQUAL(car(p3).q.a, -1) && MEQUAL(car(p3).q.b, 1))
|
95 | push(cadr(p3))
|
96 | gamma()
|
97 | push(cadr(p3))
|
98 | push_integer(-1)
|
99 | add()
|
100 | divide()
|
101 | else
|
102 | push_symbol(GAMMA)
|
103 | push(p1)
|
104 | list(2)
|
105 | return
|
106 |
|
107 |
|