### Perfect functions

Posted:

**Wed May 13, 2020 2:43 pm**A 'perfect' function is one that mimicks the built-in functions:

Call XEQ "PF1", "PF2" or "PF3" for a function of 1, 2 or 3 args returning a single argument

Example: make Z^YMOD behave like a built-in function:

"Z^YMOD"

1111 ENTER

73 ENTER

55 ENTER

31

XEQ "PF3"

results in:

T: 1111

Z: 1111

Y: 1111

X: 26

L: 31

Example: to have MOD behave like the builtin % (and thus keep Y), do:

25 ENTER

2

"MOD"

XEQ "PF1"

Hope you find it useful,

Werner

- save X in LastX
- take the n arguments from the stack, compute the result in X
- roll down the stack and replicate reg T n-1 times

Call XEQ "PF1", "PF2" or "PF3" for a function of 1, 2 or 3 args returning a single argument

Code: Select all

```
In: A: program name
stack: as needed for program
XEQ "PFn"
n: 1 2 3
Out: T: T T T
Z: Z T T
Y: Y Z T
X: result
L: lastX
00 { 76-Byte Prgm }
01▸LBL "PF1"
02 R↓
03 LSTO "Y"
04 R↓
05 LSTO "Z"
06 R↓
07 GTO 00
08▸LBL "PF2"
09 R↓
10 R↓
11 LSTO "Y"
12 R↓
13 GTO 01
14▸LBL "PF3"
15 R↑
16 LSTO "Y"
17▸LBL 01
18 LSTO "Z"
19▸LBL 00
20 LSTO "T"
21 R↓
22 LSTO "L"
23 ASTO ST L
24 XEQ IND ST L
25 STO ST L
26 RCL "T"
27 RCL "Z"
28 RCL "Y"
29 RCL "L"
30 X<> ST L
31 END
```

"Z^YMOD"

1111 ENTER

73 ENTER

55 ENTER

31

XEQ "PF3"

results in:

T: 1111

Z: 1111

Y: 1111

X: 26

L: 31

Example: to have MOD behave like the builtin % (and thus keep Y), do:

Code: Select all

```
01 LBL "MOD"
02 MOD
03 END
```

2

"MOD"

XEQ "PF1"

Hope you find it useful,

Werner