fib.tal (795B)
1 ( Fibonacci: Numbers made of the two numbers before it ) 2 3 |100 4 5 @on-reset ( -> ) 6 #0019 #0001 7 &>l ( -- ) 8 ( index ) DUP2 <pdec> 9 #2018 DEO 10 ( recursive ) DUP2 fib <pdec> 11 #2018 DEO 12 ( tail-recursive ) DUP2 #0000 #0001 ROT2 fibrec <pdec> 13 ( lb ) #0a18 DEO 14 POP2 POP2 INC2 GTH2k ?&>l 15 POP2 POP2 16 ( end ) #800f DEO 17 BRK 18 19 ( 20 @|recursive ) 21 22 @fib ( num* -- numfib* ) 23 #0001 GTH2k ?{ POP2 JMP2r } 24 SUB2k fib STH2 25 INC2 SUB2 fib STH2r ADD2 JMP2r 26 27 ( 28 @|tail-recursive ) 29 30 @fibrec ( a* b* num* -- a* b* numfib* ) 31 #0001 NEQ2k ?{ POP2 POP2 DUP2 JMP2r } 32 SUB2 STH2 33 SWP2 OVR2 ADD2 STH2r !fibrec 34 35 ( 36 @|stdlib ) 37 38 @<pdec> ( short* -- ) 39 [ LIT2r ff00 ] 40 &>read ( -- ) 41 #000a DIV2k STH2k MUL2 SUB2 STH2r INCr ORAk ?&>read 42 POP2 43 &>write ( -- ) 44 NIP #30 ADD #18 DEO 45 OVRr ADDr STHkr ?&>write 46 POP2r JMP2r 47