/**********************************************************************/
/*                  klint - KL1 $B%W%m%0%i%`@EE*2r@O7O(B                  */
/*                                                                    */
/*                            Version 2.1                             */
/*                           January  1999                            */
/*                                                                    */
/*                             $B>eED(B  $BOB5*(B                             */
/*                                                                    */
/*                     $BAa0pEDBg3XM}9)3XIt>pJs3X2J(B                     */
/*                    ueda@ueda.info.waseda.ac.jp                     */
/*                                                                    */
/*                 Copyright (C) 1999  Kazunori Ueda                  */
/*                                                                    */
/**********************************************************************/

1. $B35MW(B

klint $BBh(B2.1$BHG$O!"(BKL1 $B%W%m%0%i%`$N$?$a$N@)Ls%Y!<%9$N@EE*2r@O7O$G$"$j!"0J(B
$B2<$N5!G=$r$b$C$F$$$^$9!#(B

  - $B%b!<%I2r@O(B
  - $B%G!<%?;2>H?t2r@O(B (linearity analysis)
  - $B7?2r@O(B

klint $BBh(B2.1$BHG$NCf?4E*$J5!G=$O%b!<%I2r@O$G!"J88%(B [1] $B$K=R$Y$F$"$kJ}K!$G(B
KL1$B%W%m%0%i%`$N%b!<%I$r2r@O$7$^$9!#%W%m%0%i%`$,!VNI$/%b!<%I$E$1$i$l$F$$(B
$B$k(B (well-moded)$B!W$H$O!"Bg$^$+$K8@$($P!"%W%m%0%i%`$NCf$G;H$C$F$$$kDL?.%W(B
$B%m%H%3%k$,6(D4E*$G$"$k$H$$$&$3$H$G$9!#(BKL1 $B%W%m%0%i%`$O!"(Bwell-moded $B$K=q(B
$B$/$3$H$r6/$/?d>)$7$^$9!#$=$l$K$h$C$F!"B?$/$N8m$j$,@EE*$K8!=P$G$-$k$h$&$K(B
$B$J$j(B [3]$B!"$^$?%W%m%0%i%`$N$h$j9bEY$J:GE,2=$,2DG=$H$J$k$+$i$G$9!#(B

klint $BBh(B2.1$BHG$O!"%W%m%0%i%`Cf$G07$&%G!<%?$N;2>H?t$H7?$N2r@O$b9T$J$$$^$9!#(B
$B%G!<%?;2>H?t2r@O$NL\E*$O!"0l$D$NJQ?t=P8=$+$i$7$+;2>H$5$l$J$$%G!<%?$H!"J#(B
$B?t$NJQ?t=P8=$+$i;2>H$5$l$k2DG=@-$N$"$k%G!<%?$H$r6hJL$9$k$3$H$G$9(B [6]$B!#$3(B
$B$N$h$&$K!";2>H?t2r@O$O%3%s%Q%$%k;~%4%_=8$a$N$?$a$N4pK\E*$J>pJs$rDs6!$7$F(B
$B$/$l$^$9!#(B

klint $BBh(B2.1$BHG$K$*$1$k7?2r@O$NL\E*$O!"$I$N$h$&$J4X?t5-9f$,%W%m%0%i%`$N3F(B
$B%Q%9(B ($B%4!<%k$N0z?t$H$7$F=P8=$7$&$k%G!<%?9=B$$NCf$N8D!9$N>l=j(B) $B$K=P8=$7$&(B
$B$k$+$rD4$Y$k$3$H$G$9!#(Bklint $BBh(B2.1$BHG$G$O!"4X?t5-9f$O!"(B(1) $B@0?t!"(B(2) $BIbF0(B
$B>.?tE@?t!"(B(3) $B6u%j%9%H(B([])$B!"(B(4) $B>e5-0J30$NDj?t5-9f!"(B(5) $BJ8;zNs!"(B(6) $B%Y%/(B
$B%?!"(B(7)$B%j%9%H9=@.;R!"(B(8) $B$=$NB>$N(B($B#10z?t0J>e$N(B)$B4X?t5-9f!"$N#8$D$N%+%F%4(B
$B%j$KJ,N`$7$F2r@O$7$^$9!#(B

klint $BBh(B2.1$BHG$r;H$&$K$"$?$C$F!"%W%m%0%i%^$,%b!<%I$d;2>H?t$d7?$N@k8@$rM?(B
$B$($kI,MW$O$"$j$^$;$s!#$=$l$i$O(B klint $BBh(B2.1$BHG$,?dO@$7$F$/$l$^$9!#(B

klint $BBh(B2.1$BHG$N9=@.MWAG$O!"@)Ls@8@.7O!"%b!<%I!?;2>H?t2r@O7O!"7?2r@O7O$N(B
$B;0$D$KBg$-$/J,$1$k$3$H$,$G$-$^$9!#@)Ls@8@.7O$O!"M?$($i$l$?(B KL1 $B%W%m%0%i(B
$B%`$,9=J8E*$K2]$9$k%b!<%I!?;2>H?t!?7?@)Ls$rCj=P$7$^$9!#%b!<%I!?;2>H?t2r@O(B
$B7O$O$^$:!"%b!<%I@)Ls=89g(B S $B$KBP1~$9$k%b!<%I%0%i%U(B [1] $B$r:n$k$3$H$K$h$C$F!"(B
S $B$,=<B-2DG=$+$I$&$+$rD4$Y$^$9!#(BS $B$KBP1~$9$k%b!<%I%0%i%U$O!"%W%m%0%i%`$N(B
$B<g%b!<%I(B(principal mode, $B$b$C$H$b0lHLE*$J%b!<%I(B)$B$rI=8=$7$F$$$^$9!#(BS $B$,=<(B
$BB-(B($BIT(B)$B2DG=$J$H$-!"%W%m%0%i%`$O!VNI$/%b!<%I$E$1$i$l$F$$$k(B ($B$$$J$$(B)
((non-)well-moded)$B!W$H8@$$$^$9!#%W%m%0%i%`$,NI$/%b!<%I$E$1$i$l$F$$$k>l9g!"(B
$B%b!<%I!?;2>H?t2r@O7O$O!"0z$-B3$-;2>H?t2r@O$r9T$J$$$^$9!#;2>H?t2r@O7O$O!"(B
$B%b!<%I2r@O$HF1MM$NJ}K!$G%W%m%0%i%`$N;2>H?t%0%i%U$r:n@.$7$^$9!#(B

$B7?2r@O7O$b!"%b!<%I2r@O$HF1MM$NJ}K!$G%W%m%0%i%`$N7?%0%i%U$r:n@.$7$^$9!#$7(B
$B$+$7!"%b!<%I2r@O$H0[$J$j!"7?2r@O$,7?8m$j$rJs9p$9$k$3$H$O$"$j$^$;$s!#$3$l(B
$B$O!"0[$J$k%+%F%4%j$KB0$9$k4X?t5-9f$,F10l%Q%9$K=P8=$7$J$$$H$$$&$3$H$r2>Dj(B
$B$7$F$O$$$J$$$+$i$G$9!#(B

$B%b!<%I2r@O$NF~LgE*$JJ88%$H$7$F$O(B[2]$B$,$"$j$^$9!#(B


2. $B;HMQK!(B

klint $B$NMxMQK!$OHs>o$K4JC1$G$9!#(B

$BF~NO(B:

  % klint [+mltg12] [file ...]

klint $B$X$NF~NO$O!"0l$D0J>e$N%b%8%e!<%k$+$i$J$k(BKL1$B%W%m%0%i%`$G$"$j!">e5-(B
$B$N$h$&$KJ#?t$N%U%!%$%k$KJL$l$F$$$F$b$+$^$$$^$;$s!#%U%!%$%kL>$N;XDj$,$J$$(B
$B$H$-$O!"I8=`F~NO(B (stdin) $B$+$i%W%m%0%i%`$rFI$_9~$_$^$9!#(B

$B%*%W%7%g%s$N0UL#$O2<5-$NDL$j$G$9!#(B

  +m  $B%b!<%I2r@O$r9T$J$&!#(B
  +l  $B%b!<%I$*$h$S;2>H?t2r@O$r9T$J$&!#(B
  +t  $B7?2r@O$r9T$J$&!#(B

  +m,+l,+t $B$N$I$l$b;XDj$,$J$$>l9g$O$9$Y$F$N2r@O$r9T$J$$$^$9!#(B

  +g  $B7k2L$r%0%i%U7A<0$G=PNO$9$k!#K\%*%W%7%g%s$N;XDj$,$J$$$H$-$O!"(B
      $B%b!<%I(B/$B;2>H?t(B/$B7?@k8@7A<0$G$N=PNO$K$J$j$^$9!#(B

  +1  $B%b!<%I(B/$B;2>H?t(B/$B7?@)Ls$N@8@.$N$_9T$J$$!"2r@O7k2L$G$O$J$/@)Ls<0$r=P(B
      $BNO$9$k!#(B
  +2  +1 (KL1$B%W%m%0%i%`$G$O$J$/(B)$B%*%W%7%g%s$r$D$1$F=PNO$7$?%b!<%I(B/$B;2>H(B
      $B?t(B/$B7?@)Ls<0$rF~NO$7$F!"2r@O7k2L$r=PNO$9$k!#(B

  +1 $B$H(B +2 $B$NN>J}$r;XDj$9$k$3$H$O$G$-$^$;$s!#(B+m,+l,+t $B$N;XDj$O@)Ls@8@.(B
  $B$K$OL54X78$G!"@)Ls2r@O$K$N$_0UL#$r$b$A$^$9!#(B

$B=PNO(B:

$BM?$($i$l$?%W%m%0%i%`$,(B well-moded $B$J$i$P!"(Bklint $BBh(B2.1$BHG$O%W%m%0%i%`$N%b!<(B
$B%I>pJs!";2>H?t>pJs!"$*$h$S7?>pJs$rI8=`=PNO(B (stdout) $B$+$i=PNO$7$^$9!#I8=`(B
$BE*$J=PNO7A<0$O!"@k8@$N7A$r$7$?$b$N$G$9$,!"(B+g $B%*%W%7%g%s$r;XDj$9$k$3$H$K(B
$B$h$j!"(Bklint $BFbIt$GMQ$$$F$$$k%0%i%U7A<0$K6a$$7A$N=PNO$rF@$k$3$H$b$G$-$^$9!#(B

$B%W%m%0%i%`$,(B non-well-moded $B$J$H$-$O!"(Bklint $BBh(B2.1$BHG$O$I$N%b!<%I@)Ls$,:G(B
$B=*E*$K%b!<%I8m$j$r0z$-5/$3$7$?$+$rJs9p$7$?$"$H!"$=$N;~E@$G$N(B ($B:n@.Cf$N(B) 
$B%b!<%I%0%i%U$r=PNO$7$^$9!#;2>H?t2r@O$O9T$J$o$:!"0z$-B3$-7?%0%i%U$r=PNO$7(B
$B$^$9!#(BNon-well-moded $B$G$"$k$H$O!"%W%m%0%i%`$,2]$9$k%b!<%I@)Ls=89g$,=<B-(B
$BITG=$G$"$k$3$H$r0UL#$7$^$9!#(B

kima $B$rMQ$$$k$H!"J88%(B [4][5] $B$N%"%$%G%"$rMQ$$$F!"%b!<%I@)Ls$NL7=b$9$k6K(B
$B>.ItJ,=89g$r=PNO$7$?$j!"JQ?t$N=q$-8m$j$N<+F0=$@5$r;n$_$?$j$7$^$9!#K\%j%j!<(B
$B%9$K$O(B kima $BBh(B2$BHG$rE:IU$7$F$"$j$^$9!#(B

klint $BBh(B2.1$BHG$,$I$N$h$&$J%b!<%I!?;2>H?t!?7?@)Ls$r@8@.$7$F$$$k$+$O!"%3%^(B
$B%s%I%*%W%7%g%s(B +1 $B$r;XDj$9$k$3$H$K$h$C$FCN$k$3$H$,$G$-$^$9!#@)Ls2r@O$N$_(B
$B$r9T$J$&(B klint +2 $B$HJ;MQ$7$F(B

  % klint +1  xxx.kl1 | klint +2

$B$H$9$k$H(B

  % klint xxx.kl1

$B$HF1$8=PNO$,F@$i$l$^$9!#(B


3. $B<B9TNc(B

$B%U%!%$%k(B merge.kl1 $B$K2<5-$N%9%H%j!<%`J;9g%W%m%0%i%`$,F~$C$F$$$k$H$7$^$9!#(B

  :- module m.

  merge([],   Y,    Z ) :- true| Z=Y.
  merge(X,    [],   Z ) :- true| Z=X.
  merge([A|X],Y,    Z0) :- true| Z0=[A|Z], merge(X,Y,Z).
  merge(X,    [A|Y],Z0) :- true| Z0=[A|Z], merge(X,Y,Z).

klint $BBh(B2.1$BHG$N=PNO$O!"0J2<$N$h$&$K$J$j$^$9!#(B

  > klint merge.kl1
  %%% Mode %%%
  :- mode m:merge(1,1,-1).
  :- modedef 1 = (+,[[2|1]]).
  :- modedef 2 = (?,[]).

  %%% Linearity %%%
  :- lin m:merge(1,1,1).
  :- lindef 1 = (?,[[2|1]]).
  :- lindef 2 = (?,[]).

  %%% Type %%%
  :- type m:merge(1,1,1).
  :- typedef 1 = ([nil,cons],[[2|1]]).
  :- typedef 2 = ([],[]).

$B$^$:%b!<%I>pJs$NFI$_J}$r@bL@$7$^$9!#(Bmerge $B$NBh(B1$B0z?t$HBh(B2$B0z?t$O!"(B
:- modedef 1 = (+,[[2|1]]) $B$GDj5A$5$l$k%b!<%I$r;}$A$^$9!#$3$N%b!<%IDj5A(B1
$B$O!"<g4X?t5-9f$,F~NO(B (+) $B$G$"$j!"$5$i$K$=$l$,%j%9%H9=@.;R$G$"$k>l9g$O$=(B
$B$N(B car $B$,%b!<%IDj5A(B2$B$GDj5A$5$l$k%b!<%I$r!"(Bcdr $B$,%j%9%HA4BN$HF10l$N%b!<%I(B
$B$r$b$D$3$H$rI=$o$7$^$9!#%b!<%IDj5A(B2$B$O!"<g4X?t5-9f$N%b!<%I$,L$Dj$G$"$j!"(B
$B$H$j$&$k4X?t5-9f$K4X$9$k>pJs$b$J$$$3$H$rI=$o$7$^$9!#$7$?$,$C$F!"%b!<%IDj(B
$B5A(B1$B$O!"3FMWAG$N%b!<%I$,L$Dj(B($B$?$@$7$9$Y$F$NMWAG$K$D$$$FF10l(B)$B$G$"$j!"3F%j(B
$B9=@.;R$,F~NO$G$"$k$h$&$J%j%9%H$N%b!<%I$rI=$o$7$F$$$k$3$H$K$J$j$^$9!#(B

$B%b!<%I>pJs$N<!$K=PNO$5$l$k;2>H?t>pJs$O!"(Bmerge $B%W%m%0%i%`<+?H$,$I$N%G!<%?(B
$B$N6&M-$b?7$?$K0z$-5/$3$5$J$$$3$H$r<($7$F$$$^$9!#5-9f(B '?' $B$O!"2r@O$7$?%W(B
$B%m%0%i%`$,860x$H$J$C$F!"$=$N%Q%9$K$*$1$kJ#?t;2>H$,H/@8$9$k$3$H$O$J$$$3$H(B
$B$rI=$o$7$F$$$^$9!#>e$NNc$G$O!"F~NO%9%H%j!<%`$NMWAG(B ($B;2>H?tDj5A(B2$B$GI=$o$5(B
$B$l$^$9(B) $B$,6&M-$5$l$F$$$J$$8B$j!"=PNO%9%H%j!<%`$NMWAG$bHs6&M-$G$"$k$3$H$,(B
$BJ]>Z$5$l$^$9!#$^$?$3$N%W%m%0%i%`$O!"F~NO%9%H%j!<%`$*$h$S=PNO%9%H%j!<%`$N(B
$B9|3J(B (skeleton) $B$N6&M-$b0z$-5/$3$7$^$;$s(B ($B;2>H?tDj5A(B1)$B!#$7$?$,$C$F!"F~NO(B
$B%9%H%j!<%`$N9|3J$,J#?t;2>H$K$J$C$F$$$J$$8B$j(B $B$=$N9|3J$O=PNO%9%H%j!<%`$N(B
$B9|3J7A@.$K:FMxMQ$9$k$3$H$,$G$-$^$9!#F~NO%9%H%j!<%`$N9|3J$dMWAG$,J#?t;2>H(B
$B$K$J$k$+$I$&$+$O!"%W%m%0%i%`A4BN$N2r@O$K$h$C$FL@$i$+$K$J$j$^$9!#$?$H$($P!"(B
$B9|3J$OC1?t;2>H$@$,MWAG$,J#?t;2>H$K$J$k>l9g!";2>H?tDj5A(B2$B$NCM$,(B '?' ($BJ#?t(B
$B;2>H$N860x$r:n$C$F$$$J$$(B)$B$+$i(B '**' ($BJ#?t;2>H(B) $B$K$J$j$^$9!#(B

$B7?>pJs$NFI$_J}$OL@$i$+$G$7$g$&!#$?$H$($P7?Dj5A(B1$B$O!"3FMWAG$,7?Dj5A(B2$B$GI=$o(B
$B$5$l$k$h$&$J7?$r$b$D%j%9%H$rI=$o$7$F$$$^$9!#(B

$B%*%W%7%g%s(B +g $B$r;XDj$9$k$H=PNO$O<!$N$h$&$K$J$j$^$9!#(B

  > klint +g merge.kl1
  %%% Mode %%%
  node(0): (unconstrained)
   <(m:merge)/3,1> ---> node(13)
   <(m:merge)/3,2> ---> node(13)
   <(m:merge)/3,3> --*> node(13)
  node(13): in
   <cons,1> ---> node(15)
   <cons,2> ---> node(13)
  node(15): (unconstrained)

  %%% Linearity %%%
  node(0): (unconstrained)
   <(m:merge)/3,1> ---> node(13)
   <(m:merge)/3,2> ---> node(13)
   <(m:merge)/3,3> ---> node(13)
  node(13): (unconstrained)
   <cons,1> ---> node(15)
   <cons,2> ---> node(13)
  node(15): (unconstrained)

  %%% Type %%%
  node(0): []
   <(m:merge)/3,1> ---> node(13)
   <(m:merge)/3,2> ---> node(13)
   <(m:merge)/3,3> ---> node(13)
  node(13): [nil,cons]
   <cons,1> ---> node(15)
   <cons,2> ---> node(13)
  node(15): []

$B%b!<%I%0%i%U$NFI$_J}$@$1@bL@$7$^$9!#:,@aE@(B ($B@aE@(B 0) $B$+$i(B3$BK\$N;^$,=P$F$$(B
$B$^$9!#$3$l$i$O!"(Bmerge $B$NBh(B1$B0z?t$HBh(B2$B0z?t$,!"@aE@(B 13 $B$K$h$C$FI=$o$5$l$kF1(B
$B0l$N%b!<%I$r$b$A!"Bh(B3$B0z?t$O$=$l$H$O@5H?BP$N%b!<%I$r$b$D$3$H$rI=$o$7$F$$(B
$B$^$9!#@aE@(B 13 $B$O!"(Bmerge $B$N0z?t$H$7$F=P8=$9$k%j%9%H$N(B cdr $B$O%j%9%HA4BN$H(B
$BF10l$N%b!<%I$r$b$D$3$H$rI=L@$7$F$$$^$9!#$3$N=PNO7k2L$N%0%i%U%#%+%k$JI=8=(B
$B$O!"J88%(B [3] $B$J$I$K$"$j$^$9!#(B

$B$D$.$K!"J#?t;2>H$,8!=P$5$l$kNc$r<($7$^$9!#(B

  :- module main.

  main :- true | mults(1000).

  mults(Max) :- true |
      mults2(Max,Ys), outterms(Ys,Os), stdinout:outstream(Os).  

  mults2(N,Ys) :- true |
      timeslist(2,N,Ys,Ys2),
      timeslist(3,N,Ys,Ys3),
      timeslist(5,N,Ys,Ys5),
      merge(Ys3,Ys5,Ys35), merge(Ys2,Ys35,Ys235),
      Ys=[1|Ys235].

  timeslist(U,N,[A|_ ],Ys ) :- U*A>=N | Ys=[].
  timeslist(U,N,[A|Xs],Ys0) :- U*A< N |
      W:=U*A, Ys0=[W|Ys], timeslist(U,N,Xs,Ys).

  merge([],    Ys,    Zs ) :- true | Zs=Ys.
  merge(Xs,    [],    Zs ) :- true | Zs=Xs.
  merge([A|Xs],[B|Ys],Zs0) :- A < B | Zs0=[A|Zs], merge(Xs,[B|Ys],Zs).
  merge([A|Xs],[B|Ys],Zs0) :- A > B | Zs0=[B|Zs], merge([A|Xs],Ys,Zs).
  merge([A|Xs],[B|Ys],Zs0) :- A=:=B | Zs0=[A|Zs], merge(Xs,Ys,Zs).

  outterms([],      Os0) :- true | Os0=[].
  outterms([X|Xs1], Os0) :- true |
       Os0=[putt(X),nl|Os1], outterms(Xs1,Os1).

$B$3$N(B Hamming $B?tNs(B (2,3,5 $B$N$_$rLs?t$K;}$D<+A3?tNs(B) $B@8@.%W%m%0%i%`$N%b!<(B
$B%I$*$h$S;2>H?t$O2<5-$N$h$&$K$J$j$^$9!#(B

  > klint +l hamm.kl1
  %%% Mode %%%
  :- mode main:mults(++).
  :- mode main:mults(++,-1).
  :- mode main:outterms(1,-3).
  :- mode main:timeslist(7,++,++,-1).
  :- mode main:merge(1,1,-1).
  :- mode stdinout:outstream(3).
  :- modedef 1 = (+,[[2|1]]).
  :- modedef 2 = (+,[]).
  :- modedef 3 = (+,[[4|5]]).
  :- modedef 4 = (+,[putt(2)]).
  :- modedef 5 = (+,[[6|3]]).
  :- modedef 6 = (+,[]).
  :- modedef 7 = (+,[]).

  %%% Linearity %%%
  :- lin main:mults(1).
  :- lin main:mults2(2,**).
  :- lin main:outterms(**,3).
  :- lin main:timeslist(**,**,**,**).
  :- lin main:merge(**,**,**).
  :- lin stdinout:outstream(3).
  :- lindef 1 = (?,[]).
  :- lindef 2 = (?,[]).
  :- lindef 3 = (?,[[4|5]]).
  :- lindef 4 = (?,[putt(**)]).
  :- lindef 5 = (?,[[?|3]]).
  :- lindepend 1 => 2.

$B%b!<%I>pJs$N$J$+$N(B '++' $B$O!"$=$N0z?t0LCV0J2<$N$9$Y$F$N%Q%9$,F~NO$G$"$k$3(B
$B$H$rI=$o$7$^$9!#$3$NNc$K$O=P$F$-$^$;$s$,!"(B'-' $B$O$=$N%Q%9$,=PNO$G$"$k$3$H!"(B
'--' $B$O$=$N%Q%90J2<$,$9$Y$F=PNO$G$"$k$3$H$rI=$o$7$^$9!#(B

$B;2>H?t>pJs$O!"(Bmult2 $B$NBh(B1$B0z?t$,C10l;2>H$+$I$&$+$,(B mults $B$NBh(B1$B0z?t$,C10l(B
$B;2>H$+$I$&$+$K$+$+$C$F$$$k$3$H(B (lindepend$B@k8@(B)$B!"(Bmults2 $B$NBh(B2$B0z?t$r$O$8$a(B
$B$H$9$k(B '**' $B$GI=$o$5$l$k0z?t$OJ#?t;2>H$G$"$k$3$H!"(Boutterms $B$NBh(B2$B0z?t$*$h(B
$B$S(B outstream $B$NBh(B1$B0z?t$N%j%9%H$N9|3J$OC10l;2>H$G$"$k$3$H!"$?$@$7$=$N%j%9(B
$B%H9=B$$NCf$K8=$l$k(B putt $B$N0z?t$OJ#?t;2>H$G$"$k$3$H!"$J$I$rI=$o$7$F$$$^$9!#(B

$B$3$N%W%m%0%i%`$rC1FH$G<B9T$9$k8B$j$O!"(Bmults $B$NBh(B1$B0z?t$,C10l;2>H$G$"$k$3(B
$B$H$,J]>Z$5$l$^$9!#$7$+$7B>$N%b%8%e!<%k$+$i(B mults $B$,8F$P$l$?>l9g$O$=$N0z(B
$B?t$,B?=E;2>H$K$J$C$F$$$k$bCN$l$:!"$=$N>l9g$K$O(B mults2 $B$NBh(B1$B0z?t$bB?=E;2(B
$B>H$K$J$j$^$9!#(Blindepend $B@k8@$O$=$N$3$H$rI=8=$7$F$$$^$9!#(B


4. $B%$%s%9%H!<%k(B

klint $BBh(B2.1$BHG$O(B KL1 $B8@8l$@$1$G=q$+$l$F$$$F!"(BKLIC $B=hM}7O$G%3%s%Q%$%k$9$k(B
$B$3$H$,$G$-$^$9!#%3%^%s%I(B

  % make

$B$K$h$C$F!"<B9T2DG=%U%!%$%k(B klint $B$,:n$i$l$^$9!#(B

klint $BBh(B2.1$BHG$NG[I[%-%C%H$O!"2<5-$N%U%!%$%k$+$i$J$C$F$$$^$9!#(B

  (1) Makefile -- make $B%U%!%$%k(B
  (2) Readme-J -- $B$3$N%U%!%$%k(B
      Readme-E -- $B$3$N%U%!%$%k$N1Q8lHG(B
  (3) klint-main4.kl1, read_program4.kl1, normalize5.kl1, unify.kl1
      builtin_DB6.kl1, numberbuiltin3.kl1, findpath4.kl1
      constraintsB.kl1, type.kl1, stdinout.kl1 commandline.kl1
      klint25.kl1, graphF.kl1, tgraph3.kl1, decode2.kl1, tdecode.kl1
      reduce6.kl1, sort.kl1, outgraph.kl1, outdecl.kl1, tc.kl1,
      outconstraints.kl1
	       -- klint $BBh(B2.1$BHG$N%=!<%9%W%m%0%i%`(B
  (4) examples/merge.kl1, examples/hamm.kl1
               -- $B$3$N%^%K%e%"%k$GMQ$$$?NcBj%W%m%0%i%`(B
  (5) kima-v2/ -- kima $BBh(B2$BHG$N%G%#%l%/%H%j!J>\:Y$K$D$$$F$O%G%#%l%/%H(B
                  $B%j$N2<$N(B Readme-j, INSTALL-j $B$r$*FI$_2<$5$$!K(B


5. $B%5%]!<%H$5$l$F$$$J$$(B KL1 $B8@8l$N5!G=(B

$B<!$N(B KL1 $B8@8l$N5!G=$O8=;~E@$G$O%5%]!<%H$7$F$$$^$;$s!#(B

(1) $B%^%/%mE83+(B
(2) $B%$%s%i%$%s#C%3!<%I5!G=(B
(3) $B%8%'%M%j%C%/!&%*%V%8%'%/%H$N@8@.(B `generic:new(...)' $B$H%a%=%C%I8F=P(B
    $B$7(B `generic:METHOD'

$B$=$NB>$N(B KLIC $BBh(B3$BHG$NAH9~=R8l(B(builtin$B%b%8%e!<%k$NCf$K$"$k$b$N(B)$B$O!"2<5-$N(B
$B$b$N$r=|$$$F$9$Y$F%5%]!<%H$7$F$$$^$9!#(B

  - new_vector $B$*$h$S(B new_string $B$G!"%j%9%H$G=i4|CM$r;XDj$9$kMQK!(B
  - $B%,!<%I$G$N(B arg $B$*$h$S(B vector_element $B$NMxMQ(B
  - $B%\%G%#AH9~=R8l(B unbound

$BAH9~=R8l$OB?AjE*(B (polymorphic) $B$K07$$$^$9!#$D$^$j!"AH9~=R8l$N0[$J$k8F=P(B
$B$7$O0[$J$k%b!<%I!?;2>H?t!?7?$r$b$D$3$H$,$G$-$^$9!#J88%(B [4] $B$K$O!"%W%m%0(B
$B%i%`$NAX2=$K$h$kB?Aj@-$NF3F~$,O@$8$i$l$F$$$^$9$,!"AH9~=R8l0J30$NB?Aj(B 
(polymorphism) $B$O8=:_$OL$%5%]!<%H$G$9!#(B

$B%b!<%I!?;2>H?t!?7?$N@k8@5!G=$O=EMW$G$9$,!"$3$l$O<!$NHG$G%5%]!<%H$9$kM=Dj(B
$B$G$9!#(B


6. $B@)8B(B

(1) klint $BBh(B2.1$BHG$N%b!<%I2r@O$O<g%b!<%I$r5a$a$k$3$H$rL\E*$K$7$F$$$^$9$,!"(B
$B@a$K#32s0J>e=P8=$9$kJQ?t(B (nonlinear $B$JJQ?t(B) $B$K$D$$$F$O!"0lJ}8~E*$J>pJs$N(B
$BN.$l$r$b$C$F$$$k$H2>Dj$7$F@)Ls$N%j%@%/%7%g%s$r9T$J$$!":GHF2r$h$j$b@)Ls$N(B
$B6/$$2r$r=PNO$9$k$3$H$,$"$j$^$9!#$7$+$7!"$3$l$^$G$K=q$+$l$?(B KL1 $B%W%m%0%i(B
$B%`$G!"(Bnonlinear $B$JJQ?t$r(B ($BJV?.H"$D$-$N%a%C%;!<%8$J$I$N(B) $BAPJ}8~DL?.$KMQ$$(B
$B$F$$$?Nc$O$[$H$s$I$"$j$^$;$s!#(B

(2) $B>e5-(B (1) $B$N@)Ls6/2=$K$h$C$F$b!"C19`$^$?$O#29`$N@)Ls$X$N%j%@%/%7%g%s(B
$B$,$G$-$J$+$C$?#39`0J>e$N@)Ls$K$D$$$F$O!"$=$N=<B-2DG=@-$O8!::$7$^$;$s!#(B
klint $BBh(B2.1$BHG$OC1$K$=$l$i$N@)Ls$,%j%@%/%7%g%s$G$-$J$+$C$?;]$rJs9p$7$^$9!#(B


$B;29MJ88%(B

[1] Ueda, K. and Morita, M., Moded Flat GHC and Its Message-Oriented
Implementation Technique.  New Generation Computing, Vol.13, No.1
(1994), pp.3-43.

[2] Ueda, K., I/O Mode Analysis in Concurrent Logic Programming.  In
Theory and Practice of Parallel Programming, LNCS 907, Springer, 1995,
pp.356-368.

[3] Ueda, K., Experiences with Strong Moding in Concurrent
Logic/Constraint Programming.  In Proc. Int. Workshop on Parallel
Symbolic Languages and Systems (PSLS'95), T. Ito, R.H. Halstead, Jr., and
C. Queinnec (eds.), LNCS 1068, Springer, 1996, pp.134-153.

[4] Cho, K. and Ueda, K., Diagnosing Non-Well-Moded Concurrent Logic
Programs.  To be presented at 1996 Joint International Conference and
Symposium on Logic Programming (JICSLP'96), Bonn, Germany, September
1996.

[5] Ajiro, Y., Ueda, K. and Cho, K., Error-correcting Source Code.  In
Proc. Fourth Int. Conf. on Principles and Practice of Constraint
Programming (CP'98), LNCS 1520, Springer-Verlag, Berlin, 1998, pp.40-54.

[6] $B>eEDOB5*!'JB9TO@M}%W%m%0%i%`$N;2>H?t2r@O!%>pJs=hM}3X2q%W%m%0%i%_%s%0(B
$B8&5f2q!$(B1998$BG/(B8$B7n!%2~D{HG$r!V(BKL1$B%W%m%0%i%`@EE*2r@O7O!W@.2LJs9p=q!$F|K\>p(B
$BJs=hM}3+H/6(2q!$(B1999 $B$K=j<}!%(B
