uxn/projects/examples/exercises/fib.tal

55 lines
828 B
Tal
Raw Normal View History

2022-03-25 13:29:45 -04:00
( Fibonacci:
2023-06-06 14:49:28 -04:00
A series of numbers where the next number
2022-03-25 13:29:45 -04:00
is made of the two numbers before it )
2022-02-23 18:23:38 -05:00
2023-06-06 17:33:20 -04:00
|0100 @on-reset
2022-02-23 18:23:38 -05:00
2023-06-02 00:53:28 -04:00
#0019 #0000
&l
DUP2 pdec #2018 DEO
2023-06-06 14:49:28 -04:00
DUP2 fib pdec #2018 DEO
DUP2 #0000 #0001 ROT2 fibr pdec #0a18 DEO POP2 POP2
2023-06-02 00:53:28 -04:00
INC2 GTH2k ?&l
POP2 POP2
2023-06-06 17:33:20 -04:00
#800f DEO
2022-02-23 18:23:38 -05:00
BRK
2023-06-06 14:49:28 -04:00
( recursive )
2023-06-06 17:33:20 -04:00
@fib ( num* -- numfib* )
2023-06-02 00:53:28 -04:00
#0001 GTH2k ?&ok
POP2 JMP2r &ok
SUB2k fib STH2 INC2
SUB2 fib STH2r
ADD2
JMP2r
2023-06-06 14:49:28 -04:00
( tail-recursive )
2023-06-06 17:33:20 -04:00
@fibr ( a* b* num* -- a* b* numfib* )
2023-06-06 14:49:28 -04:00
ORAk ?&no-0
POP2 OVR2 JMP2r &no-0
DUP2 #0001 NEQ2 ?&no-1
POP2 DUP2 JMP2r &no-1
#0001 SUB2 STH2
SWP2 ADD2k NIP2 STH2r
!fibr
( print routine )
2023-06-02 00:53:28 -04:00
@pdec ( short* -- )
2022-02-23 18:23:38 -05:00
2023-06-02 00:53:28 -04:00
#2710 LIT2r 00fb
&w
DIV2k #000a DIV2k MUL2 SUB2 SWPr
EQUk OVR STHkr EQU AND ?&skip
DUP LIT "0 ADD #19 DEO INCr
&skip
POP2 #000a DIV2
SWPr INCr STHkr ?&w
POP2r POP2 POP2
2022-02-23 18:23:38 -05:00
JMP2r
2023-06-02 00:53:28 -04:00