1 | ### denominator =====================================================================
|
2 |
|
3 | Tags
|
4 | ----
|
5 | scripting, JS, internal, treenode, general concept
|
6 |
|
7 | Parameters
|
8 | ----------
|
9 | x
|
10 |
|
11 | General description
|
12 | -------------------
|
13 | Returns the denominator of expression x.
|
14 |
|
15 | ###
|
16 |
|
17 |
|
18 | Eval_denominator = ->
|
19 | push(cadr(p1))
|
20 | Eval()
|
21 | denominator()
|
22 |
|
23 | denominator = ->
|
24 | h = 0
|
25 |
|
26 | save()
|
27 |
|
28 | p1 = pop()
|
29 |
|
30 | if (car(p1) == symbol(ADD))
|
31 | push(p1)
|
32 | rationalize()
|
33 | p1 = pop()
|
34 |
|
35 | if (car(p1) == symbol(MULTIPLY))
|
36 | h = tos
|
37 | p1 = cdr(p1)
|
38 | while (iscons(p1))
|
39 | push(car(p1))
|
40 | denominator()
|
41 | p1 = cdr(p1)
|
42 | multiply_all(tos - h)
|
43 | else if (isrational(p1))
|
44 | push(p1)
|
45 | mp_denominator()
|
46 | else if (car(p1) == symbol(POWER) && isnegativeterm(caddr(p1)))
|
47 | push(p1)
|
48 | reciprocate()
|
49 | else
|
50 | push(one)
|
51 |
|
52 | restore()
|
53 |
|