23 KiB
23 KiB
In [1]:
from notebook_preamble import J, V, defineIn [2]:
V('[0 swap [dup ++] dip rest cons] x') . [0 swap [dup ++] dip rest cons] x
[0 swap [dup ++] dip rest cons] . x
[0 swap [dup ++] dip rest cons] . 0 swap [dup ++] dip rest cons
[0 swap [dup ++] dip rest cons] 0 . swap [dup ++] dip rest cons
0 [0 swap [dup ++] dip rest cons] . [dup ++] dip rest cons
0 [0 swap [dup ++] dip rest cons] [dup ++] . dip rest cons
0 . dup ++ [0 swap [dup ++] dip rest cons] rest cons
0 0 . ++ [0 swap [dup ++] dip rest cons] rest cons
0 1 . [0 swap [dup ++] dip rest cons] rest cons
0 1 [0 swap [dup ++] dip rest cons] . rest cons
0 1 [swap [dup ++] dip rest cons] . cons
0 [1 swap [dup ++] dip rest cons] .
In [3]:
J('[0 swap [dup ++] dip rest cons] x x x x x pop')0 1 2 3 4
In [4]:
define('direco == dip rest cons')In [5]:
V('[0 swap [dup ++] direco] x') . [0 swap [dup ++] direco] x
[0 swap [dup ++] direco] . x
[0 swap [dup ++] direco] . 0 swap [dup ++] direco
[0 swap [dup ++] direco] 0 . swap [dup ++] direco
0 [0 swap [dup ++] direco] . [dup ++] direco
0 [0 swap [dup ++] direco] [dup ++] . direco
0 [0 swap [dup ++] direco] [dup ++] . dip rest cons
0 . dup ++ [0 swap [dup ++] direco] rest cons
0 0 . ++ [0 swap [dup ++] direco] rest cons
0 1 . [0 swap [dup ++] direco] rest cons
0 1 [0 swap [dup ++] direco] . rest cons
0 1 [swap [dup ++] direco] . cons
0 [1 swap [dup ++] direco] .
In [6]:
define('G == [direco] cons [swap] swoncat cons')In [7]:
J('0 [dup ++] G')[0 swap [dup ++] direco]
In [8]:
J('0 [dup ++] G x x x pop')0 1 2
In [9]:
J('1 [dup 1 <<] G x x x x x x x x x pop')1 2 4 8 16 32 64 128 256
In [10]:
J('23 [dup ++] G 5 [x] times')23 24 25 26 27 [28 swap [dup ++] direco]
In [11]:
define('PE1.1 == dup [3 &] dip 2 >>')In [12]:
V('14811 PE1.1') . 14811 PE1.1
14811 . PE1.1
14811 . dup [3 &] dip 2 >>
14811 14811 . [3 &] dip 2 >>
14811 14811 [3 &] . dip 2 >>
14811 . 3 & 14811 2 >>
14811 3 . & 14811 2 >>
3 . 14811 2 >>
3 14811 . 2 >>
3 14811 2 . >>
3 3702 .
In [13]:
J('14811 [PE1.1] G')[14811 swap [PE1.1] direco]
In [14]:
J('[14811 swap [PE1.1] direco] 7 [x] times')3 2 1 3 1 2 3 [0 swap [PE1.1] direco]
In [15]:
define('PE1.1.check == dup [pop 14811] [] branch')In [16]:
J('14811 [PE1.1.check PE1.1] G')[14811 swap [PE1.1.check PE1.1] direco]
In [17]:
J('[14811 swap [PE1.1.check PE1.1] direco] 21 [x] times')3 2 1 3 1 2 3 3 2 1 3 1 2 3 3 2 1 3 1 2 3 [0 swap [PE1.1.check PE1.1] direco]
In [18]:
J('7 66 * 4 +')466
In [19]:
J('[14811 swap [PE1.1.check PE1.1] direco] 466 [x] times')3 2 1 3 1 2 3 3 2 1 3 1 2 3 3 2 1 3 1 2 3 3 2 1 3 1 2 3 3 2 1 3 1 2 3 3 2 1 3 1 2 3 3 2 1 3 1 2 3 3 2 1 3 1 2 3 3 2 1 3 1 2 3 3 2 1 3 1 2 3 3 2 1 3 1 2 3 3 2 1 3 1 2 3 3 2 1 3 1 2 3 3 2 1 3 1 2 3 3 2 1 3 1 2 3 3 2 1 3 1 2 3 3 2 1 3 1 2 3 3 2 1 3 1 2 3 3 2 1 3 1 2 3 3 2 1 3 1 2 3 3 2 1 3 1 2 3 3 2 1 3 1 2 3 3 2 1 3 1 2 3 3 2 1 3 1 2 3 3 2 1 3 1 2 3 3 2 1 3 1 2 3 3 2 1 3 1 2 3 3 2 1 3 1 2 3 3 2 1 3 1 2 3 3 2 1 3 1 2 3 3 2 1 3 1 2 3 3 2 1 3 1 2 3 3 2 1 3 1 2 3 3 2 1 3 1 2 3 3 2 1 3 1 2 3 3 2 1 3 1 2 3 3 2 1 3 1 2 3 3 2 1 3 1 2 3 3 2 1 3 1 2 3 3 2 1 3 1 2 3 3 2 1 3 1 2 3 3 2 1 3 1 2 3 3 2 1 3 1 2 3 3 2 1 3 1 2 3 3 2 1 3 1 2 3 3 2 1 3 1 2 3 3 2 1 3 1 2 3 3 2 1 3 1 2 3 3 2 1 3 1 2 3 3 2 1 3 1 2 3 3 2 1 3 1 2 3 3 2 1 3 1 2 3 3 2 1 3 1 2 3 3 2 1 3 1 2 3 3 2 1 3 1 2 3 3 2 1 3 1 2 3 3 2 1 3 1 2 3 3 2 1 3 1 2 3 3 2 1 3 1 2 3 3 2 1 3 1 2 3 3 2 1 3 1 2 3 3 2 1 3 1 2 3 3 2 1 3 1 2 3 3 2 1 3 1 2 3 3 2 1 3 1 2 3 3 2 1 3 1 2 3 3 2 1 3 [57 swap [PE1.1.check PE1.1] direco]
In [20]:
J('[14811 swap [PE1.1.check PE1.1] direco] 466 [x] times pop enstacken sum')999
In [21]:
define('PE1.2 == + dup [+] dip')In [22]:
J('0 0 0 [PE1.1.check PE1.1] G 466 [x [PE1.2] dip] times popop')233168
In [23]:
define('fib == + [popdd over] cons infra uncons')In [24]:
define('fib_gen == [1 1 fib]')In [25]:
J('fib_gen 10 [x] times')1 2 3 5 8 13 21 34 55 89 [144 89 fib]
In [26]:
define('PE2.1 == dup 2 % [+] [pop] branch')In [27]:
define('>4M == 4000000 >')In [28]:
define('PE2 == 0 fib_gen x [pop >4M] [popop] [[PE2.1] dip x] primrec')In [29]:
J('PE2')4613732
In [30]:
J('[1 0 fib] x x x') # To start the sequence with 1 1 2 3 instead of 1 2 3.1 1 2 [3 2 fib]
In [31]:
J('[1 0 fib] x x x [popop] dipd')2 [3 2 fib]
In [32]:
define('PE2.2 == x x x [popop] dipd')In [33]:
J('[1 0 fib] 10 [PE2.2] times')2 8 34 144 610 2584 10946 46368 196418 832040 [1346269 832040 fib]
In [34]:
J('0 [1 0 fib] PE2.2 [pop >4M] [popop] [[PE2.1] dip PE2.2] primrec')4613732
In [35]:
define('codireco == cons dip rest cons')In [36]:
V('[0 [dup ++] codireco] x') . [0 [dup ++] codireco] x
[0 [dup ++] codireco] . x
[0 [dup ++] codireco] . 0 [dup ++] codireco
[0 [dup ++] codireco] 0 . [dup ++] codireco
[0 [dup ++] codireco] 0 [dup ++] . codireco
[0 [dup ++] codireco] 0 [dup ++] . cons dip rest cons
[0 [dup ++] codireco] [0 dup ++] . dip rest cons
. 0 dup ++ [0 [dup ++] codireco] rest cons
0 . dup ++ [0 [dup ++] codireco] rest cons
0 0 . ++ [0 [dup ++] codireco] rest cons
0 1 . [0 [dup ++] codireco] rest cons
0 1 [0 [dup ++] codireco] . rest cons
0 1 [[dup ++] codireco] . cons
0 [1 [dup ++] codireco] .
In [37]:
define('G == [codireco] cons cons')In [38]:
J('230 [dup ++] G 5 [x] times pop')230 231 232 233 234