mirror of
https://github.com/louisrubet/rpn
synced 2024-12-28 09:58:52 +01:00
143 lines
2 KiB
Markdown
143 lines
2 KiB
Markdown
# PROGRAM
|
|
|
|
`default del`
|
|
|
|
## program
|
|
|
|
`<< 'one' >>`
|
|
|
|
-> stack size should be 1
|
|
|
|
-> stack should be «'one'»
|
|
|
|
`del`
|
|
|
|
## program (2)
|
|
|
|
`<< 'one' 2`
|
|
|
|
-> stack size should be 1
|
|
|
|
-> stack should be «'one' 2»
|
|
|
|
`del`
|
|
|
|
## program (3)
|
|
|
|
`<<`
|
|
|
|
-> stack size should be 1
|
|
|
|
-> stack should be «»
|
|
|
|
`del`
|
|
|
|
## program (4)
|
|
|
|
`<< << << <<`
|
|
|
|
-> stack size should be 1
|
|
|
|
-> stack should be «<< << <<»
|
|
|
|
`del`
|
|
|
|
## program (5)
|
|
|
|
`<< -> n << n 2 * >> >>`
|
|
|
|
-> stack size should be 1
|
|
|
|
-> stack should be «-> n << n 2 * >>»
|
|
|
|
`del`
|
|
|
|
## program imbrication
|
|
|
|
`<< 1 << 2 >> >>`
|
|
|
|
-> stack should be «1 << 2 >>»
|
|
|
|
`del`
|
|
|
|
## program evaluation
|
|
|
|
`<< 1 << 2 >> >> dup eval`
|
|
|
|
-> stack should be «1 << 2 >>», 1, «2»
|
|
|
|
`del`
|
|
|
|
## program 1 arg
|
|
|
|
`default`
|
|
|
|
`10`
|
|
|
|
`<< -> n << 0 1 n for i i 2 * inv + next >> >>`
|
|
|
|
`eval`
|
|
|
|
-> stack should be 1.4644841269841269841269841269841269841
|
|
|
|
`del`
|
|
|
|
## nested programs
|
|
|
|
`0 1 10 << -> u0 u1 n << u0 u1 1 n start dup2 + rot drop next swap drop >> >> eval`
|
|
|
|
`eval`
|
|
|
|
-> stack should be 89
|
|
|
|
`del`
|
|
|
|
## fibo
|
|
|
|
```
|
|
«dup 1 > if then dup 1 - fibo swap 2 - fibo + else 1 == if then 1 else 0 end end» 'fibo' sto
|
|
«dup 1 > if then dup 1 - fibo swap 2 - fibo + else 1 == 1 0 ifte end» 'fibo' sto
|
|
7 fibo
|
|
13 == if then 'ok!' end
|
|
```
|
|
|
|
-> stack should be 'ok!'
|
|
|
|
`del`
|
|
|
|
## nested programs with local variables
|
|
|
|
```
|
|
100
|
|
10
|
|
«dup2 * -> a b c << a b + c / -> d << << -> sym << sym ->str " is " + sym rcl ->str + >> >> 'stringify' sto 'a' stringify 'b' stringify 'c' stringify 'd' stringify >> >>»
|
|
eval
|
|
```
|
|
|
|
-> stack should be "'a' is 100", "'b' is 10", "'c' is 1000", "'d' is 0.11"
|
|
|
|
`del`
|
|
|
|
## local variables multiple entries
|
|
|
|
`1 2 3 << -> a b c << "a is " a ->str + "b is " b ->str + "c is " c ->str + >> >> eval`
|
|
|
|
-> stack should be "a is 1", "b is 2", "c is 3"
|
|
|
|
`del`
|
|
|
|
## local variables separation (1)
|
|
|
|
`123 'n' sto 1 << -> n << "n is " n ->str + >> >> eval`
|
|
|
|
-> stack should be "n is 1"
|
|
|
|
`del`
|
|
|
|
## local variables separation (2)
|
|
|
|
`123 'n' sto 2 << -> n << n sq << -> n << "n is " n ->str + >> >> >> eval >> eval`
|
|
|
|
-> stack should be "n is 4"
|
|
|
|
`del`
|