Artifact Content
Not logged in

Artifact 4af3c4ccb9eff42b8e5d305f3119010df30cfa68


     1  # I'm lazy. So I define only the primitives needed for tarai.
     2  @@lazy(x) { fun(){x} };
     3  @lazy - (x,y) { fun(){@value(@lazy(x)() - @lazy(y)()) } };
     4  @lazy <= (x,y) { fun(){@value(@lazy(x)() <= @lazy(y)()) } };
     5  @lazy if (c,t,e) { fun(){@value(if @lazy(c)() then @lazy(t())() else @lazy(e())()) } };
     6  
     7  def tarai(x,y,z)
     8  {
     9  	if x<=y then
    10  		y
    11  	else
    12  		tarai( tarai(x-1,y,z), tarai(y-1,z,x), tarai(z-1,x,y) )
    13  };
    14  
    15  # print( tarai(12, 6, 0) );
    16  print( @lazy( tarai(12, 6, 0) )() );
    17  
    18  
    19  #### Omake: only Z is made lazy.
    20  def taraiZ(x,y,z @lazy)
    21  {
    22  	if x<=y then
    23  		y
    24  	else
    25  		taraiZ( taraiZ(x-1,y,z), taraiZ(y-1,@lazy(z)(),x), taraiZ(@lazy(z)()-1,x,y) )
    26  };
    27  print( taraiZ(12,6,0) );