uxn/projects/examples/exercises/fib.tal

48 lines
856 B
Tal
Raw Normal View History

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