2D

use strict
use Acme::ICFP2006::2D::Parser;
my $f = Acme::ICFP2006::2D::Parser->parse("2d/mult.2d");
my $a = 3;
my $b = 4;
my $ans = $f->{modules}->{mult}->call(toIntExp($a), toIntExp($b));
print $ans->str;


sub toIntExp{
  my $a = shift;
  my $str = "Inl " x $a . "Inr ()";
  return Acme::ICFP2006::2D::Exp->new($str);
}

実行結果

Inl Inl Inl Inl Inl Inl Inl Inl Inl Inl Inl Inl Inr ()

出来た。
ちなみに、mult.2dは、以下の通り。

      ,..............................|....................................,
      :plus                          |                                    :
      :  *==================*        |                                    :
      -->!send [(W,S),(W,E)]!--------#--------------------+               :
      :  *==================*        |                    |               :
      :         |                    |                    |               :
      :         |                    v                    v               :
      :         |                 *==============*    *============*      :
      :         |                 !case N of S, E!--->!send [(N,E)]!-------
      :         |                 *==============*    *============*      :
      :         |                        |                                :
      :         |                        v                                :
      :         |                    *========*       *================*  :
      :         +------------------->!use plus!------>!send [(Inl W,E)]!---
      :                              *========*       *================*  :
      ,...................................................................,

,..............................|....................................,
mult |
*=================* |
    • >!send[(W,S),(W,E)]!---------#-------------------+ :
*=================* v v
| *==============* *=================*
: | !case N of S, E!---->!send[(Inr (), E)]!--
| *==============* *=================*
| |
v |
*==========* |
!split(N,N)!--------------#------------+
*==========* | |
| | |
| v v
| *========* *========*
: +--------------->!use mult!---->!use plus!-----------------
*========* *========*
,...................................................................,