1 |
|
2 |
|
3 | Eval_mod = ->
|
4 | push(cadr(p1))
|
5 | Eval()
|
6 | push(caddr(p1))
|
7 | Eval()
|
8 | mod()
|
9 |
|
10 | mod = ->
|
11 | n = 0
|
12 |
|
13 | save()
|
14 |
|
15 | p2 = pop()
|
16 | p1 = pop()
|
17 |
|
18 | if (iszero(p2))
|
19 | stop("mod function: divide by zero")
|
20 |
|
21 | if (!isnum(p1) || !isnum(p2))
|
22 | push_symbol(MOD)
|
23 | push(p1)
|
24 | push(p2)
|
25 | list(3)
|
26 | restore()
|
27 | return
|
28 |
|
29 | if (isdouble(p1))
|
30 | push(p1)
|
31 | n = pop_integer()
|
32 | if (isNaN(n))
|
33 | stop("mod function: cannot convert float value to integer")
|
34 | push_integer(n)
|
35 | p1 = pop()
|
36 |
|
37 | if (isdouble(p2))
|
38 | push(p2)
|
39 | n = pop_integer()
|
40 | if (isNaN(n))
|
41 | stop("mod function: cannot convert float value to integer")
|
42 | push_integer(n)
|
43 | p2 = pop()
|
44 |
|
45 | if (!isinteger(p1) || !isinteger(p2))
|
46 | stop("mod function: integer arguments expected")
|
47 |
|
48 | p3 = new U()
|
49 | p3.k = NUM
|
50 | p3.q.a = mmod(p1.q.a, p2.q.a)
|
51 | p3.q.b = mint(1)
|
52 | push(p3)
|
53 |
|
54 | restore()
|
55 |
|