Data update
This commit is contained in:
parent
5150844a7d
commit
4bb20c9b71
7735 changed files with 38060 additions and 199180 deletions
|
|
@ -1,36 +0,0 @@
|
|||
with Ada.Text_IO; use Ada.Text_IO;
|
||||
|
||||
procedure Man_Or_Boy is
|
||||
function Zero return Integer is begin return 0; end Zero;
|
||||
function One return Integer is begin return 1; end One;
|
||||
function Neg return Integer is begin return -1; end Neg;
|
||||
|
||||
function A
|
||||
( K : Integer;
|
||||
X1, X2, X3, X4, X5 : access function return Integer
|
||||
) return Integer is
|
||||
M : Integer := K; -- K is read-only in Ada. Here is a mutable copy of
|
||||
function B return Integer is
|
||||
begin
|
||||
M := M - 1;
|
||||
return A (M, B'Access, X1, X2, X3, X4);
|
||||
end B;
|
||||
begin
|
||||
if M <= 0 then
|
||||
return X4.all + X5.all;
|
||||
else
|
||||
return B;
|
||||
end if;
|
||||
end A;
|
||||
begin
|
||||
Put_Line
|
||||
( Integer'Image
|
||||
( A
|
||||
( 10,
|
||||
One'Access, -- Returns 1
|
||||
Neg'Access, -- Returns -1
|
||||
Neg'Access, -- Returns -1
|
||||
One'Access, -- Returns 1
|
||||
Zero'Access -- Returns 0
|
||||
) ) );
|
||||
end Man_Or_Boy;
|
||||
|
|
@ -1,30 +0,0 @@
|
|||
with Ada.Text_IO; use Ada.Text_IO;
|
||||
|
||||
procedure Man_Or_Boy is
|
||||
function Zero return Integer is (0);
|
||||
function One return Integer is (1);
|
||||
function Neg return Integer is (-1);
|
||||
|
||||
function A
|
||||
(K : Integer;
|
||||
X1, X2, X3, X4, X5 : access function return Integer)
|
||||
return Integer is
|
||||
M : Integer := K; -- K is read-only in Ada. Here is a mutable copy of
|
||||
function B return Integer is
|
||||
begin
|
||||
M := M - 1;
|
||||
return A (M, B'Access, X1, X2, X3, X4);
|
||||
end B;
|
||||
begin
|
||||
return (if M <= 0 then X4.all + X5.all else B);
|
||||
end A;
|
||||
begin
|
||||
Put_Line
|
||||
(Integer'Image
|
||||
(A (K => 10,
|
||||
X1 => One'Access,
|
||||
X2 => Neg'Access,
|
||||
X3 => Neg'Access,
|
||||
X4 => One'Access,
|
||||
X5 => Zero'Access)));
|
||||
end Man_Or_Boy;
|
||||
|
|
@ -1,41 +0,0 @@
|
|||
with Ada.Text_IO;
|
||||
use Ada.Text_IO;
|
||||
|
||||
procedure Man_Or_Boy is
|
||||
|
||||
function Zero return Integer is ( 0);
|
||||
function One return Integer is ( 1);
|
||||
function Neg return Integer is (-1);
|
||||
|
||||
function A (K: Integer;
|
||||
X1, X2, X3, X4, X5: access function return Integer) return Integer is
|
||||
M : Integer := K; -- K is read-only in Ada. Here is a mutable copy of K
|
||||
Res_A: Integer;
|
||||
function B return Integer is
|
||||
begin
|
||||
M := M - 1;
|
||||
Res_A := A (M, B'Access, X1, X2, X3, X4); -- set result of A
|
||||
return Res_A;
|
||||
end B;
|
||||
begin
|
||||
if M <= 0 then
|
||||
return X4.all + X5.all;
|
||||
else
|
||||
declare
|
||||
Dummy: constant Integer := B; -- throw away
|
||||
begin
|
||||
return Res_A;
|
||||
end;
|
||||
end if;
|
||||
end A;
|
||||
|
||||
begin
|
||||
|
||||
Put_Line (Integer'Image (A (K => 10,
|
||||
X1 => One 'Access,
|
||||
X2 => Neg 'Access,
|
||||
X3 => Neg 'Access,
|
||||
X4 => One 'Access,
|
||||
X5 => Zero'Access)));
|
||||
|
||||
end Man_Or_Boy;
|
||||
|
|
@ -2,24 +2,24 @@ import extensions;
|
|||
|
||||
A(k,x1,x2,x3,x4,x5)
|
||||
{
|
||||
var m := new ref<int>(k);
|
||||
var m := new Reference<int>(k);
|
||||
|
||||
var b := { m -= 1; ^ A(m,this self,x1,x2,x3,x4) };
|
||||
var b := { m -= 1; ^ A(m,this self,x1,x2,x3,x4) };
|
||||
|
||||
if (m <= 0)
|
||||
{
|
||||
^ x4() + x5()
|
||||
}
|
||||
else
|
||||
{
|
||||
^ b()
|
||||
}
|
||||
if (m <= 0)
|
||||
{
|
||||
^ x4() + x5()
|
||||
}
|
||||
else
|
||||
{
|
||||
^ b()
|
||||
}
|
||||
}
|
||||
|
||||
public program()
|
||||
public Program()
|
||||
{
|
||||
for(int n := 0; n <= 14; n += 1)
|
||||
{
|
||||
console.printLine(A(n,{^1},{^-1},{^-1},{^1},{^0}))
|
||||
}
|
||||
for(int n := 0; n <= 14; n += 1)
|
||||
{
|
||||
Console.printLine(A(n,{ ^1 },{ ^-1 },{ ^-1 },{ ^1 },{ ^0 }))
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,25 +1,23 @@
|
|||
-->
|
||||
<span style="color: #008080;">without</span> <span style="color: #008080;">js</span> <span style="color: #000080;font-style:italic;">-- allocate()</span>
|
||||
<span style="color: #008080;">forward</span> <span style="color: #008080;">function</span> <span style="color: #000000;">A</span><span style="color: #0000FF;">(</span><span style="color: #004080;">integer</span> <span style="color: #000000;">k</span><span style="color: #0000FF;">,</span> <span style="color: #004080;">object</span> <span style="color: #000000;">x1</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">x2</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">x3</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">x4</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">x5</span><span style="color: #0000FF;">)</span>
|
||||
without js -- allocate()
|
||||
forward function A(integer k, object x1, x2, x3, x4, x5)
|
||||
|
||||
<span style="color: #008080;">function</span> <span style="color: #000000;">B</span><span style="color: #0000FF;">(</span><span style="color: #004080;">sequence</span> <span style="color: #000000;">s</span><span style="color: #0000FF;">)</span>
|
||||
<span style="color: #004080;">object</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">kptr</span><span style="color: #0000FF;">,</span><span style="color: #000000;">x1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">x2</span><span style="color: #0000FF;">,</span><span style="color: #000000;">x3</span><span style="color: #0000FF;">,</span><span style="color: #000000;">x4</span><span style="color: #0000FF;">}</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">s</span>
|
||||
<span style="color: #004080;">integer</span> <span style="color: #000000;">k</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">peek4s</span><span style="color: #0000FF;">(</span><span style="color: #000000;">kptr</span><span style="color: #0000FF;">)-</span><span style="color: #000000;">1</span>
|
||||
<span style="color: #7060A8;">poke4</span><span style="color: #0000FF;">(</span><span style="color: #000000;">kptr</span><span style="color: #0000FF;">,</span><span style="color: #000000;">k</span><span style="color: #0000FF;">)</span>
|
||||
<span style="color: #008080;">return</span> <span style="color: #000000;">A</span><span style="color: #0000FF;">(</span><span style="color: #000000;">k</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">kptr</span><span style="color: #0000FF;">,</span><span style="color: #000000;">x1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">x2</span><span style="color: #0000FF;">,</span><span style="color: #000000;">x3</span><span style="color: #0000FF;">,</span><span style="color: #000000;">x4</span><span style="color: #0000FF;">},</span><span style="color: #000000;">x1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">x2</span><span style="color: #0000FF;">,</span><span style="color: #000000;">x3</span><span style="color: #0000FF;">,</span><span style="color: #000000;">x4</span><span style="color: #0000FF;">)</span>
|
||||
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
|
||||
function B(sequence s)
|
||||
object {kptr,x1,x2,x3,x4} = s
|
||||
integer k = peek4s(kptr)-1
|
||||
poke4(kptr,k)
|
||||
return A(k,{kptr,x1,x2,x3,x4},x1,x2,x3,x4)
|
||||
end function
|
||||
|
||||
<span style="color: #008080;">function</span> <span style="color: #000000;">A</span><span style="color: #0000FF;">(</span><span style="color: #004080;">integer</span> <span style="color: #000000;">k</span><span style="color: #0000FF;">,</span> <span style="color: #004080;">object</span> <span style="color: #000000;">x1</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">x2</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">x3</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">x4</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">x5</span><span style="color: #0000FF;">)</span>
|
||||
<span style="color: #008080;">if</span> <span style="color: #000000;">k</span><span style="color: #0000FF;"><=</span><span style="color: #000000;">0</span> <span style="color: #008080;">then</span>
|
||||
<span style="color: #008080;">return</span> <span style="color: #008080;">iff</span><span style="color: #0000FF;">(</span><span style="color: #004080;">sequence</span><span style="color: #0000FF;">(</span><span style="color: #000000;">x4</span><span style="color: #0000FF;">)?</span><span style="color: #000000;">B</span><span style="color: #0000FF;">(</span><span style="color: #000000;">x4</span><span style="color: #0000FF;">):</span><span style="color: #000000;">x4</span><span style="color: #0000FF;">)+</span>
|
||||
<span style="color: #008080;">iff</span><span style="color: #0000FF;">(</span><span style="color: #004080;">sequence</span><span style="color: #0000FF;">(</span><span style="color: #000000;">x5</span><span style="color: #0000FF;">)?</span><span style="color: #000000;">B</span><span style="color: #0000FF;">(</span><span style="color: #000000;">x5</span><span style="color: #0000FF;">):</span><span style="color: #000000;">x5</span><span style="color: #0000FF;">)</span>
|
||||
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
|
||||
<span style="color: #004080;">atom</span> <span style="color: #000000;">kptr</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">allocate</span><span style="color: #0000FF;">(</span><span style="color: #000000;">4</span><span style="color: #0000FF;">,</span><span style="color: #000000;">1</span><span style="color: #0000FF;">)</span>
|
||||
<span style="color: #7060A8;">poke4</span><span style="color: #0000FF;">(</span><span style="color: #000000;">kptr</span><span style="color: #0000FF;">,</span><span style="color: #000000;">k</span><span style="color: #0000FF;">)</span>
|
||||
<span style="color: #008080;">return</span> <span style="color: #000000;">B</span><span style="color: #0000FF;">({</span><span style="color: #000000;">kptr</span><span style="color: #0000FF;">,</span><span style="color: #000000;">x1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">x2</span><span style="color: #0000FF;">,</span><span style="color: #000000;">x3</span><span style="color: #0000FF;">,</span><span style="color: #000000;">x4</span><span style="color: #0000FF;">})</span>
|
||||
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
|
||||
function A(integer k, object x1, x2, x3, x4, x5)
|
||||
if k<=0 then
|
||||
return iff(sequence(x4)?B(x4):x4)+
|
||||
iff(sequence(x5)?B(x5):x5)
|
||||
end if
|
||||
atom kptr = allocate(4,1)
|
||||
poke4(kptr,k)
|
||||
return B({kptr,x1,x2,x3,x4})
|
||||
end function
|
||||
|
||||
<span style="color: #008080;">for</span> <span style="color: #000000;">k</span><span style="color: #0000FF;">=</span><span style="color: #000000;">0</span> <span style="color: #008080;">to</span> <span style="color: #000000;">23</span> <span style="color: #008080;">do</span>
|
||||
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"A(%d) = %d\n"</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">k</span><span style="color: #0000FF;">,</span><span style="color: #000000;">A</span><span style="color: #0000FF;">(</span><span style="color: #000000;">k</span><span style="color: #0000FF;">,</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">0</span><span style="color: #0000FF;">)})</span>
|
||||
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
|
||||
<!--
|
||||
for k=0 to iff(machine_bits()=32?23:26) do
|
||||
printf(1,"A(%d) = %d\n",{k,A(k,1,-1,-1,1,0)})
|
||||
end for
|
||||
|
|
|
|||
|
|
@ -1,19 +1,17 @@
|
|||
(phixonline)-->
|
||||
<span style="color: #008080;">with</span> <span style="color: #008080;">javascript_semantics</span>
|
||||
<span style="color: #008080;">constant</span> <span style="color: #000000;">first5</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">0</span><span style="color: #0000FF;">,-</span><span style="color: #000000;">2</span><span style="color: #0000FF;">,</span><span style="color: #000000;">0</span><span style="color: #0000FF;">,</span><span style="color: #000000;">1</span><span style="color: #0000FF;">}</span>
|
||||
<span style="color: #008080;">function</span> <span style="color: #000000;">A</span><span style="color: #0000FF;">(</span><span style="color: #004080;">integer</span> <span style="color: #000000;">k</span><span style="color: #0000FF;">)</span>
|
||||
<span style="color: #008080;">if</span> <span style="color: #000000;">k</span><span style="color: #0000FF;"><</span><span style="color: #000000;">5</span> <span style="color: #008080;">then</span> <span style="color: #008080;">return</span> <span style="color: #000000;">first5</span><span style="color: #0000FF;">[</span><span style="color: #000000;">k</span><span style="color: #0000FF;">+</span><span style="color: #000000;">1</span><span style="color: #0000FF;">]</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
|
||||
<span style="color: #004080;">atom</span> <span style="color: #000000;">c0</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">3</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">c1</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">2</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">c2</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">1</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">c3</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">0</span>
|
||||
<span style="color: #008080;">for</span> <span style="color: #000000;">j</span><span style="color: #0000FF;">=</span><span style="color: #000000;">5</span> <span style="color: #008080;">to</span> <span style="color: #000000;">k</span><span style="color: #0000FF;">-</span><span style="color: #000000;">1</span> <span style="color: #008080;">do</span>
|
||||
<span style="color: #000000;">c3</span> <span style="color: #0000FF;">+=</span> <span style="color: #000000;">c0</span><span style="color: #0000FF;">-</span><span style="color: #000000;">1</span>
|
||||
<span style="color: #000000;">c0</span> <span style="color: #0000FF;">+=</span> <span style="color: #000000;">c1</span>
|
||||
<span style="color: #000000;">c1</span> <span style="color: #0000FF;">+=</span> <span style="color: #000000;">c2</span>
|
||||
<span style="color: #000000;">c2</span> <span style="color: #0000FF;">+=</span> <span style="color: #000000;">c3</span>
|
||||
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
|
||||
<span style="color: #008080;">return</span> <span style="color: #000000;">c0</span><span style="color: #0000FF;">-</span><span style="color: #000000;">c1</span><span style="color: #0000FF;">-</span><span style="color: #000000;">c2</span><span style="color: #0000FF;">+</span><span style="color: #000000;">c3</span>
|
||||
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
|
||||
with javascript_semantics
|
||||
constant first5 = {1,0,-2,0,1}
|
||||
function A(integer k)
|
||||
if k<5 then return first5[k+1] end if
|
||||
atom c0 = 3, c1 = 2, c2 = 1, c3 = 0
|
||||
for j=5 to k-1 do
|
||||
c3 += c0-1
|
||||
c0 += c1
|
||||
c1 += c2
|
||||
c2 += c3
|
||||
end for
|
||||
return c0-c1-c2+c3
|
||||
end function
|
||||
|
||||
<span style="color: #008080;">for</span> <span style="color: #000000;">k</span><span style="color: #0000FF;">=</span><span style="color: #000000;">0</span> <span style="color: #008080;">to</span> <span style="color: #000000;">40</span> <span style="color: #008080;">do</span>
|
||||
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"%d %d\n"</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">k</span><span style="color: #0000FF;">,</span><span style="color: #000000;">A</span><span style="color: #0000FF;">(</span><span style="color: #000000;">k</span><span style="color: #0000FF;">)})</span>
|
||||
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
|
||||
<!--
|
||||
for k=0 to iff(machine_bits()=32?50:60) do
|
||||
printf(1,"%d %d\n",{k,A(k)})
|
||||
end for
|
||||
|
|
|
|||
|
|
@ -1,27 +1,25 @@
|
|||
(phixonline)-->
|
||||
<span style="color: #008080;">with</span> <span style="color: #008080;">javascript_semantics</span>
|
||||
<span style="color: #008080;">include</span> <span style="color: #004080;">mpfr</span><span style="color: #0000FF;">.</span><span style="color: #000000;">e</span>
|
||||
<span style="color: #008080;">function</span> <span style="color: #000000;">A</span><span style="color: #0000FF;">(</span><span style="color: #004080;">integer</span> <span style="color: #000000;">k</span><span style="color: #0000FF;">)</span>
|
||||
<span style="color: #008080;">if</span> <span style="color: #000000;">k</span><span style="color: #0000FF;"><</span><span style="color: #000000;">5</span> <span style="color: #008080;">then</span> <span style="color: #008080;">return</span> <span style="color: #7060A8;">mpz_init</span><span style="color: #0000FF;">({</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">0</span><span style="color: #0000FF;">,-</span><span style="color: #000000;">2</span><span style="color: #0000FF;">,</span><span style="color: #000000;">0</span><span style="color: #0000FF;">,</span><span style="color: #000000;">1</span><span style="color: #0000FF;">}[</span><span style="color: #000000;">k</span><span style="color: #0000FF;">+</span><span style="color: #000000;">1</span><span style="color: #0000FF;">])</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
|
||||
<span style="color: #004080;">mpz</span> <span style="color: #000000;">c0</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">mpz_init</span><span style="color: #0000FF;">(</span><span style="color: #000000;">3</span><span style="color: #0000FF;">),</span>
|
||||
<span style="color: #000000;">c1</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">mpz_init</span><span style="color: #0000FF;">(</span><span style="color: #000000;">2</span><span style="color: #0000FF;">),</span>
|
||||
<span style="color: #000000;">c2</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">mpz_init</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">),</span>
|
||||
<span style="color: #000000;">c3</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">mpz_init</span><span style="color: #0000FF;">(</span><span style="color: #000000;">0</span><span style="color: #0000FF;">)</span>
|
||||
<span style="color: #008080;">for</span> <span style="color: #000000;">j</span><span style="color: #0000FF;">=</span><span style="color: #000000;">5</span> <span style="color: #008080;">to</span> <span style="color: #000000;">k</span><span style="color: #0000FF;">-</span><span style="color: #000000;">1</span> <span style="color: #008080;">do</span>
|
||||
<span style="color: #7060A8;">mpz_add</span><span style="color: #0000FF;">(</span><span style="color: #000000;">c3</span><span style="color: #0000FF;">,</span><span style="color: #000000;">c3</span><span style="color: #0000FF;">,</span><span style="color: #000000;">c0</span><span style="color: #0000FF;">)</span>
|
||||
<span style="color: #7060A8;">mpz_sub_ui</span><span style="color: #0000FF;">(</span><span style="color: #000000;">c3</span><span style="color: #0000FF;">,</span><span style="color: #000000;">c3</span><span style="color: #0000FF;">,</span><span style="color: #000000;">1</span><span style="color: #0000FF;">)</span>
|
||||
<span style="color: #7060A8;">mpz_add</span><span style="color: #0000FF;">(</span><span style="color: #000000;">c0</span><span style="color: #0000FF;">,</span><span style="color: #000000;">c0</span><span style="color: #0000FF;">,</span><span style="color: #000000;">c1</span><span style="color: #0000FF;">)</span>
|
||||
<span style="color: #7060A8;">mpz_add</span><span style="color: #0000FF;">(</span><span style="color: #000000;">c1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">c1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">c2</span><span style="color: #0000FF;">)</span>
|
||||
<span style="color: #7060A8;">mpz_add</span><span style="color: #0000FF;">(</span><span style="color: #000000;">c2</span><span style="color: #0000FF;">,</span><span style="color: #000000;">c2</span><span style="color: #0000FF;">,</span><span style="color: #000000;">c3</span><span style="color: #0000FF;">)</span>
|
||||
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
|
||||
<span style="color: #7060A8;">mpz_sub</span><span style="color: #0000FF;">(</span><span style="color: #000000;">c0</span><span style="color: #0000FF;">,</span><span style="color: #000000;">c0</span><span style="color: #0000FF;">,</span><span style="color: #000000;">c1</span><span style="color: #0000FF;">)</span>
|
||||
<span style="color: #7060A8;">mpz_sub</span><span style="color: #0000FF;">(</span><span style="color: #000000;">c0</span><span style="color: #0000FF;">,</span><span style="color: #000000;">c0</span><span style="color: #0000FF;">,</span><span style="color: #000000;">c2</span><span style="color: #0000FF;">)</span>
|
||||
<span style="color: #7060A8;">mpz_add</span><span style="color: #0000FF;">(</span><span style="color: #000000;">c0</span><span style="color: #0000FF;">,</span><span style="color: #000000;">c0</span><span style="color: #0000FF;">,</span><span style="color: #000000;">c3</span><span style="color: #0000FF;">)</span>
|
||||
<span style="color: #008080;">return</span> <span style="color: #000000;">c0</span>
|
||||
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
|
||||
with javascript_semantics
|
||||
include mpfr.e
|
||||
function A(integer k)
|
||||
if k<5 then return mpz_init({1,0,-2,0,1}[k+1]) end if
|
||||
mpz c0 = mpz_init(3),
|
||||
c1 = mpz_init(2),
|
||||
c2 = mpz_init(1),
|
||||
c3 = mpz_init(0)
|
||||
for j=5 to k-1 do
|
||||
mpz_add(c3,c3,c0)
|
||||
mpz_sub_ui(c3,c3,1)
|
||||
mpz_add(c0,c0,c1)
|
||||
mpz_add(c1,c1,c2)
|
||||
mpz_add(c2,c2,c3)
|
||||
end for
|
||||
mpz_sub(c0,c0,c1)
|
||||
mpz_sub(c0,c0,c2)
|
||||
mpz_add(c0,c0,c3)
|
||||
return c0
|
||||
end function
|
||||
|
||||
<span style="color: #008080;">constant</span> <span style="color: #000000;">tests</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">tagset</span><span style="color: #0000FF;">(</span><span style="color: #000000;">20</span><span style="color: #0000FF;">,</span><span style="color: #000000;">0</span><span style="color: #0000FF;">)&{</span><span style="color: #000000;">30</span><span style="color: #0000FF;">,</span><span style="color: #000000;">39</span><span style="color: #0000FF;">,</span><span style="color: #000000;">500</span><span style="color: #0000FF;">,</span><span style="color: #000000;">10000</span><span style="color: #0000FF;">,</span><span style="color: #000000;">1e6</span><span style="color: #0000FF;">}</span>
|
||||
<span style="color: #008080;">for</span> <span style="color: #000000;">k</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">to</span> <span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">tests</span><span style="color: #0000FF;">)-(</span><span style="color: #7060A8;">platform</span><span style="color: #0000FF;">()=</span><span style="color: #004600;">JS</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">do</span>
|
||||
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"A(%,d) = %s\n"</span><span style="color: #0000FF;">,</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">tests</span><span style="color: #0000FF;">[</span><span style="color: #000000;">k</span><span style="color: #0000FF;">],</span><span style="color: #7060A8;">mpz_get_short_str</span><span style="color: #0000FF;">(</span><span style="color: #000000;">A</span><span style="color: #0000FF;">(</span><span style="color: #000000;">tests</span><span style="color: #0000FF;">[</span><span style="color: #000000;">k</span><span style="color: #0000FF;">]))})</span>
|
||||
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
|
||||
<!--
|
||||
constant tests = tagset(20,0)&{30,39,500,10000,1e6}
|
||||
for k=1 to length(tests)-(platform()=JS) do
|
||||
printf(1,"A(%,d) = %s\n", {tests[k],mpz_get_short_str(A(tests[k]))})
|
||||
end for
|
||||
|
|
|
|||
|
|
@ -5,15 +5,17 @@ trait Arg {
|
|||
}
|
||||
|
||||
impl Arg for i32 {
|
||||
fn run(&self) -> i32 { *self }
|
||||
fn run(&self) -> i32 {
|
||||
*self
|
||||
}
|
||||
}
|
||||
|
||||
struct B<'a> {
|
||||
k: &'a Cell<i32>,
|
||||
x1: &'a Arg,
|
||||
x2: &'a Arg,
|
||||
x3: &'a Arg,
|
||||
x4: &'a Arg,
|
||||
x1: &'a dyn Arg,
|
||||
x2: &'a dyn Arg,
|
||||
x3: &'a dyn Arg,
|
||||
x4: &'a dyn Arg,
|
||||
}
|
||||
|
||||
impl<'a> Arg for B<'a> {
|
||||
|
|
@ -23,14 +25,18 @@ impl<'a> Arg for B<'a> {
|
|||
}
|
||||
}
|
||||
|
||||
fn a(k: i32, x1: &Arg, x2: &Arg, x3: &Arg, x4: &Arg, x5: &Arg) -> i32 {
|
||||
fn a(k: i32, x1: &dyn Arg, x2: &dyn Arg, x3: &dyn Arg, x4: &dyn Arg, x5: &dyn Arg) -> i32 {
|
||||
if k <= 0 {
|
||||
x4.run() + x5.run()
|
||||
} else {
|
||||
B{
|
||||
B {
|
||||
k: &Cell::new(k),
|
||||
x1, x2, x3, x4
|
||||
}.run()
|
||||
x1,
|
||||
x2,
|
||||
x3,
|
||||
x4,
|
||||
}
|
||||
.run()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,18 +1,27 @@
|
|||
use std::cell::Cell;
|
||||
|
||||
fn a(k: i32, x1: &Fn() -> i32, x2: &Fn() -> i32, x3: &Fn() -> i32, x4: &Fn() -> i32, x5: &Fn() -> i32) -> i32 {
|
||||
fn a(
|
||||
k: i32,
|
||||
x1: &dyn Fn() -> i32,
|
||||
x2: &dyn Fn() -> i32,
|
||||
x3: &dyn Fn() -> i32,
|
||||
x4: &dyn Fn() -> i32,
|
||||
x5: &dyn Fn() -> i32,
|
||||
) -> i32 {
|
||||
let k1 = Cell::new(k);
|
||||
struct B<'a> { f: &'a Fn(&B) -> i32 }
|
||||
struct B<'a> {
|
||||
f: &'a dyn Fn(&B) -> i32,
|
||||
}
|
||||
let b = B {
|
||||
f: &|b| {
|
||||
k1.set(k1.get() - 1);
|
||||
return a(k1.get(), &||(b.f)(b), x1, x2, x3, x4)
|
||||
}
|
||||
return a(k1.get(), &|| (b.f)(b), x1, x2, x3, x4);
|
||||
},
|
||||
};
|
||||
let b = ||(b.f)(&b);
|
||||
return if k <= 0 {x4() + x5()} else {b()}
|
||||
let b = || (b.f)(&b);
|
||||
return if k <= 0 { x4() + x5() } else { b() };
|
||||
}
|
||||
|
||||
pub fn main() {
|
||||
println!("{}", a(10, &||1, &||-1, &||-1, &||1, &||0));
|
||||
println!("{}", a(10, &|| 1, &|| -1, &|| -1, &|| 1, &|| 0));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,20 +3,28 @@ use std::cell::RefCell;
|
|||
use std::rc::Rc;
|
||||
use std::rc::Weak;
|
||||
|
||||
fn a(k: i32, x1: &Fn() -> i32, x2: &Fn() -> i32, x3: &Fn() -> i32, x4: &Fn() -> i32, x5: &Fn() -> i32) -> i32 {
|
||||
let weak_holder: Rc<RefCell<Weak<Fn() -> i32>>> = Rc::new(RefCell::new(Weak::<fn() -> i32>::new()));
|
||||
fn a(
|
||||
k: i32,
|
||||
x1: &dyn Fn() -> i32,
|
||||
x2: &dyn Fn() -> i32,
|
||||
x3: &dyn Fn() -> i32,
|
||||
x4: &dyn Fn() -> i32,
|
||||
x5: &dyn Fn() -> i32,
|
||||
) -> i32 {
|
||||
let weak_holder: Rc<RefCell<Weak<dyn Fn() -> i32>>> =
|
||||
Rc::new(RefCell::new(Weak::<fn() -> i32>::new()));
|
||||
let weak_holder2 = weak_holder.clone();
|
||||
let k_holder = Cell::new(k);
|
||||
let b: Rc<Fn() -> i32> = Rc::new(move || {
|
||||
let b: Rc<dyn Fn() -> i32> = Rc::new(move || {
|
||||
let b = weak_holder2.borrow().upgrade().unwrap();
|
||||
k_holder.set(k_holder.get() - 1);
|
||||
return a(k_holder.get(), &*b, x1, x2, x3, x4);
|
||||
});
|
||||
weak_holder.replace(Rc::downgrade(&b));
|
||||
|
||||
return if k <= 0 {x4() + x5()} else {b()}
|
||||
return if k <= 0 { x4() + x5() } else { b() };
|
||||
}
|
||||
|
||||
pub fn main() {
|
||||
println!("{}", a(10, &||1, &||-1, &||-1, &||1, &||0));
|
||||
println!("{}", a(10, &|| 1, &|| -1, &|| -1, &|| 1, &|| 0));
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue