/**********************************************************************/
/*          Kima  -- KL1 ץ༫ư (version 2.0)           */
/*                                                                    */
/*                            March 1999                              */
/*                                                                    */
/*                        , µ                          */
/*                                                                    */
/*                    رظ                    */
/*                     ز                     */
/*                                                                    */
/*                {ajiro,ueda}@ueda.info.waseda.ac.jp                 */
/*                                                                    */
/*         Copyright (C) 1999  Yasuhiro Ajiro, Kazunori Ueda          */
/*                                                                    */
/**********************************************************************/


1. 

Kima ver.2 ϡŪϤˤäơKL1 ץѿξĤν񤭸
ưŪ˽뤳ȤǤޤ˸ŪʹޤKL1 ʤɤ
(¹)Ǥϥץѿ¿Ѥ뤿ᡢñʸ¿Ϥ
ѿλȤδְ㤤ˤäȯޤKima ver.2 ϡ¿ȯ뤳Τ褦
ʸŪ˽ǽϤäƤޤñʤ嵭Τ褦ʸǤʤ
⡢Kima ver.2 ϸθȤʤäƤ򡢥ץƥΤ
ϰ˹ʤळȤǽǤ٤Ƥθ꤬ Kima ver.2 ˤ
ƸС뤤ϽǤ櫓ǤϤޤ

Kima ver.2 ϡ礭ʬƼ3ĤΥץǡưԤʤޤ
٤ƤΥץˤơ⡼/ϤϴṲ̄ޤ

  (1. ) ⡼/η(strong-moding/typing)˴Ť⡼/

  (2. ) ⡼/󽸹̷⤹˾ʬη׻

  (3. ) (2)ˤѿ˴ŤƤõ

KL1 ˤ⡼/Ϥϡץƥε§
ñ󼰤ν­ȤƲ򤯤Τǡץॵ˴ؤ
ۤμ֤ǹԤʤȤǤޤ(ʸ[3,4])⡼/ν礬­
ǽʥץ well-moded/typed ʥץȤ­Բǽˤʤץ
 non-well-moded/typed ʥץȤޤ

ץ˸꤬硢⡼󼰤ν礬⤤Ψǽ­Բǽˤʤ
ᡢŪʸФǽȤʤޤޤʻѤˤäơθ
򤵤˹뤳ȤǤޤΤȤ󽸹̷⤹˾ʬ
(minimal inconsistent subset) ׻뤳Ȥǡ̷θꥵ
󽸹礪ӤݤƤ뵭()˹ʤळȤǤޤ(ʸ[2])

ơ˾ˤäƲȻŦ줿νиѲ뤳Ȥǡ
ݤƤѲ̷ä뤳ȤǤޤKima ver.2 ϡ
well-moded/typed ʥץץץȤߤʤȤ
ꤵ줿ν񴹤򵡳Ū˹ԤȤǡƤõԤʤޤҤζ
ˤäƸβսʤǤ뤳ȤˤꡢõŪʻ֤
Ԥʤ櫓Ǥܺ٤ˤĤƤʸ[1]򻲾ȤƤ

 Kima ver.2 Ǥϡҥ塼ꥹƥѤơ᤿(ʣ)Ƥ
Фͥ٤ĤޤKima ver.2 ѤƤҥ塼ꥹƥϰʲΤ
ʤΤǤ

 ҥ塼ꥹƥ

  (1) 궯⡼βݤ롢
        - ѿΥܥǥñȽиƤ롢뤤
        - ƬƱѿ 2 ʾиƤ
      褦ʽƤϡȤƤäȤ餷ʤ

  (2) ǡꥹȤ car  ꥹȷΥѥƱѿиƤ
      Ǥǽ⤤

  (3) ɤˤѿإåɤˤʤϸǤǽ˹⤤  

  (4) ˥եξ¦Ʊѿ¸ߤƤϸǤ
      ǽ˹⤤(ñ occur-check)

Kima ver.2  (1), (2) ˴ؤƤϽƤͥ٤ĤƵޤ(3), (4) 
ˤäƸȤߤʤ褦ʽƤ˴ؤƤϡƤ鴰˽Ƥ
ޤ

ޤ Kima ver.2 Ǥϡޥɥ饤󥪥ץˤäơ̷⤹˾ʬ
롢⡼/ΰѤ롢õο(ѿν񴹤
Ŀ)ꤹ롢ʤɤ椬Ԥʤޤ


1.1. Klint ver.2 ˤ()ϤȤμ

Kima ver.2 ϡKL1 ץŪϷ Klint ver.2 (ʸ[5])Ѥƺ
ƤޤKima ver.2 ιԤʤϤȤϰۤʤäƤʬϤ˴ؤ
Ƽ2ޤ

(1) Klint ver.2 Ǥϡ˴ؤƤ϶ηϤȤƤޤKima ver.2 
ǤϰʲΤ褦˥ǡʬषƱΥѥ˰ۤʤؿ椬иΤ
ߤ뤳ȤǡηϤƤޤ

           KLIC Ϥˤ wrapped term
 ----------------------------------------------------------------
   F1            integer(Int)
   F2  ư      floating_point(Float)
   F3  ʸ        string(Str)
   F4  ٥        vector({Elem, ...})
   F5  ꥹ        list([Car|Cdr]) ޤ atom([])
   F6  ȥ饯  functor(Functor(Arg, ...)) ޤ atom(Atom)
                                            Atom `[]'ʳ

(2) Kima ver.2 ǤϥꥹȤ cdr ѿǤ硢ѿ˥ꥹȷ
ݤޤ Klint ver.2 ǤϹԤʤޤ


2. ˡ

Kima μ¹Ԥϡ KL1 ץΥե򼡤Τ褦˻ꤹ
ǤեʣǤޤ

  % kima xxx.kl1 yyy.kl1 zzz.kl1

ˤäơ(ѿν񴹤Ŀ) 1 õˤ뽤Ƥ󼨤ޤ

ޤιʤߤԤʤϡʲΤ褦ˤ̷⤹˾ʬ
뤳ȤǤޤ

  % kima +mis xxx.kl1 yyy.kl1 zzz.kl1

꤬ȯǤʤäϡɽ줺˼¹Ԥλޤ
¾õοʤɤκ٤¹ˤĤƤ 4 򻲾ȤƤ


3. ¹

 1. -- 1 սθ

2ĤΥꥹȤĤʤ append ץѿ 1 ս񤭴ְ㤨Ƥ
ͤޤ

 +------- append.kl1 ---------------------------------------------------+
 |                                                                      |
 | :- module test.                                                      |
 |                                                                      |
 | append([],   Y,Z) :- true | Y=Z.                                     |
 | %append([A|X],Y,Z0) :- true | Z0=[A|Z], append(X,Y,Z).  <-- correct  |
 | append([A|Y],Y,Z0) :- true | Z0=[A|Z], append(X,Y,Z).                |
 |                                                                      |
 +----------------------------------------------------------------------+

Фͥ 100ޤǤνƤ󼨤ˤϼΤ褦ˤޤ

  % kima +p 100 append.kl1
 
ȰʲΤ褦ʽϤޤ

    ================= Suspected Group 1 =================

           ------------- Priority 1 -------------
  append([A|Y],X,Z0):-true|Z0=[A|Z],append(X,Y,Z)
                                  at place(test,append/3,2)
           -----
  append([A|X],Y,Z0):-true|Z0=[A|Z],append(X,Y,Z)
                                  at place(test,append/3,2)
           -----
           ------------- Priority 2 -------------
  append([A|Y],Y,Z0):-true|Z0=[A|Z],append(Z,Y,Z)
                                  at place(test,append/3,2)
           -----
  append([A|Y],Y,Z0):-true|Z0=[A|Z],append(Z0,Y,Z)
                                  at place(test,append/3,2)
           -----
         ------------- Priority 3 -------------
  append([A|Y],Y,Z0):-true|Z0=[A|Z],append(Y,Y,Z)
                                  at place(test,append/3,2)
           -----
           ------------- Priority 4 -------------
  append([A|Y],Y,Z0):-true|Z0=[A|Z],append(A,Y,Z)
                                  at place(test,append/3,2)
           -----

ϡͥ 1  4 ޤǤ6ĤνƤޤäƤ뤳ȤɽƤޤ
ͥ 1 νƤȤƺǤͥ٤ι⤤ƤǤƤϤҤȤĤ
`-----' Ƕڤɽޤ`place(test,append/3,2)' ˤäơ
νƤ

     test ⥸塼ˤ 3 νҸ append  2 ܤ

˴ؤ뽤ƤǤ뤳ȤɽƤޤPriority 1  2 ܤνƤտ
νˤʤäƤޤ1 ܤνƤϡ2 ĤΥꥹȤǤߤ˥ޡ
ץˤʤäƤޤ(ʸ[1])

ĤˡƤõäƷ׻Ƥ롢⡼/̷⤹˾ʬ
(ʲǤ MIS)ɽޤ礦

  % kima +mis append.kl1

  < Minimal Inconsistent Subsets of *Mode* constraints >
  ig([((test:append)/3,1),(cons,2)])
      <- hv(variable(1,"Y"),place(test,append/3,2))
  og([((test:append)/3,1)])
      <- bv(variable(4,"X"),place(test,append/3,2))
  -----
  < Minimal Inconsistent Subsets of *Type* constraints >
   --Constraints are consistent, and there is no MIS--

ǽ˥⡼˴ؤ MIS ɽ졢˷˴ؤ MIS ɽ
̷⤹˾ʬϡΩʣΤΤ٤˵뤳ȤǤ(ʸ
[2])`-----' Ƕڤ줿ʣΤΤޤޤǤϥ⡼ɤ˴ؤ 
1 Ĥ MIS ޤäƤޤ󡣤ޤ˴ؤƤ̷⤬ȯƤʤ
Ȥ狼ޤ

MIS ΤƬϤޤäƤԤMIS ǤǤ󼰤ɽƤޤ
ξ硢MIS  2 Ĥ󼰤ǹƤޤ󼰤μιԤ
 `<-' ǻϤޤäƤԤϡξ󼰤ɤεˤäƲݤ줿ɽ
Ƥޤplace(..) ɤۤɤƱͤǤĤޤꡢ 
`ig([((test:append)/3,1),(cons,2)])' ݤƤΤ

             place(test,append/3,2) ѿ Y

ȥ⡼ɤŤ§ `hv' (ʸ[4])ǤȤȤ狼ޤäƤ 
MIS ˤꡢtest ⥸塼ˤ 3 νҸ append  2 ܤ
ѿ X  Y θȤƵ路פȤȤ狼ޤ
Kima ver.2 ϡ X  Y ѿνи뤳Ȥǡ
õԤʤޤ


 2. -- Ω 2 սθ

ˡΨ׳ؤˤȹ礻פ׻ץѿ 2 սְ㤨
Ƥͤޤ

  +--------- comb.kl1 ---------------------------------------------+
  | :- module probability.                                         |
  |                                                                |
  | % nCr (n >= r >= 0)                                            |
  | % Use: combination(N,R,C)                                      |
  | %   e.g. combinaiton(3,2,Res) --> [[1,1,0], [1,0,1], [0,1,1]]  |
  | combination(N,0,C) :- true | init_list(0,N,0,[],C0), C=[C0].   |
  | combination(N,N,C) :- true | init_list(0,N,1,[],C0), C=[C0].   |
  | combination(N,R,C) :- N>R  |                                   |
  |     N1:=N-1, R1:=R-1,                                          |
  |     combination(N1,R1,C0), cons_list(1,C0,CC0),                |
  |     combination(N1,R, C1), cons_list(0,C1,CC1),                |
  | %   append(CC0,CC1,C).                            <-- correct  |
  |     append(CC0,CC1,CC).                                        |
  |                                                                |
  | init_list(N,Len,E,L0,L) :- N =:= Len | L0=L.                   |
  | %init_list(N,Len,E,L0,L) :- N  <  Len |           <-- correct  |
  | init_list(N,Len,E,L0,L0) :- N  <  Len |                        |
  |     L1=[E|L0], N1:=N+1, init_list(N1,Len,E,L1,L).              |
  |                                                                |
  | cons_list(_,[],    L) :- true | L=[].                          |
  | cons_list(A,[X|Xs],L) :- true |                                |
  |     L=[[A|X]|L1], cons_list(A,Xs,L1).                          |
  |                                                                |
  | append([],   Y,Z ) :- true | Y=Z.                              |
  | append([A|X],Y,Z0) :- true | Z0=[A|Z], append(X,Y,Z).          |
  +----------------------------------------------------------------+

Фƿ 1 ǽƤõޤ

  % kima comb.kl1

    ================= Suspected Group 1 =================

           ------------- Priority 1 -------------
  combination(N,R,C):-N>R|N1:=N-1,R1:=R-1,combination(N1,R1,C0),
  cons_list(1,C0,CC0),combination(N1,R,C1),cons_list(0,C1,CC1),
  append(CC0,CC1,C)
                                  at place(probability,combination/3,3)
           -----
  combination(N,R,CC):-N>R|N1:=N-1,R1:=R-1,combination(N1,R1,C0),
  cons_list(1,C0,CC0),combination(N1,R,C1),cons_list(0,C1,CC1),
  append(CC0,CC1,CC)
                                  at place(probability,combination/3,3)
           -----
    ================= Suspected Group 2 =================

           ------------- Priority 1 -------------
  init_list(N,Len,E,L0,L):-N<Len|L1=[E|L0],N1:=N+1,init_list(N1,Len,E,L1,L)
                                  at place(probability,init_list/5,2)
           -----

ƤϸŤ餤ǤSuspected Group ȤΤ 2 Ĥ뤳Ȥ狼ޤ
Kima ver.2 ǤϡõäƵޤäʣ MIS 򡢤θȤʤä
᤬ŤʤäƤ뤫ɤǥ롼ײ N νƤõϡΥ
롼פȤΩƹԤʤޤξ硢Kima ѿ 2 Ĥθ꤬
Ω륰롼פˤȽǤ줾Фƿ 1 õԤʤäơտ
̤νƤ뤳ȤƤޤʤߤ Suspected Group 1 2 
νƤϡ񴹤㤦ΤΡ̤ȤƱץˤʤäƤޤ
θսΥ롼ײ˴ؤƤϡʸ[6]򻲾ȤƲ


 3. -- Ʊ쥰롼פ 2 սθ

åȤԤʤץˤơƱѿ 2 ս񤭴ְ㤨
ͤޤ

 +--------- qsort.kl1 -------------------------------------------------------+
 | :- module main.                                                           |
 |                                                                           |
 | main :- true | quicksort([3,8,2,5,6],Res),io:ousstream([print(Res),nl]).  |
 |                                                                           |
 | quicksort(Xs,Ys) :- qsort(Xs,Ys,[]).                                      |
 | qsort([],    Ys0,Ys ) :- true | Ys=Ys0.                                   |
 | qsort([X|Xs],Ys0,Ys3) :- true |                                           |
 |     part(X,Xs,S,L), qsort(S,Ys0,Ys1),                                     |
 | %   Ys1=[X|Ys2], qsort(L,Ys2,Ys3).               <-- correct              |
 |     Ys2=[X|Ys1], qsort(L,Ys2,Ys3).                                        |
 |                                                                           |
 | part(_,[],    S, L ) :- true | S=[], L=[].                                |
 | part(A,[X|Xs],S0,L ) :- A>=X | S0=[X|S], part(A,Xs,S,L).                  |
 | part(A,[X|Xs],S, L0) :- A< X | L0=[X|L], part(A,Xs,S,L).                  |
 +---------------------------------------------------------------------------+

Фơ 1 õԤʤޤ

  % kima qsort.kl1

    ================= Suspected Group 1 =================

           ------------- Priority 1 -------------
  qsort([X|Xs],Ys0,Ys3):-true|part(X,Xs,S,L),qsort(S,Ys0,Ys1),Ys2=[X|Ys1],
  qsort(L,Ys1,Ys3)
                                  at place(main,qsort/3,2)
           -----

η̡ƤΤ褦˵ޤޤΥץϡܥǥˤ
ѿ Ys2 ˥եˤäƶβΤΡͤɤ
ȤƤʤȤʥץˤʤäƤޤ

ǡ 2 õ򤷤Ƥߤޤ礦

  % kima +d 2 qsort.kl1

    ================= Suspected Group 1 =================

           ------------- Priority 1 -------------
  qsort([X|Xs],Ys0,Ys3):-true|part(X,Xs,S,L),qsort(S,Ys0,Ys1),Ys1=[X|Ys2],
  qsort(L,Ys2,Ys3)
                                  at place(main,qsort/3,2)
           -----
  qsort([X|Xs],Ys0,Ys3):-true|part(X,Xs,S,L),qsort(S,Ys0,Ys2),Ys2=[X|Ys1],
  qsort(L,Ys1,Ys3)
                                  at place(main,qsort/3,2)
           -----

տ̤νƤ1 ܤνƤȤƵޤޤ2 ܤνƤ񴹤
㤤ޤƱΥץˤʤäƤޤ 2 õǤϡ 1  
õˤ뽤ƤƱ˵Ƥꡢ餹٤Ƥҥ塼ꥹƥˤä
ͥ٤ŤƤޤĤޤꡢ N ˤ뽤Ƥõˤϡ
1, ..., N-1 νƤƱ˵ᡢ餹٤ƤФͥ٤Ĥ롢Ȥ
Ԥʤޤ

ξ硢 1 νƤϡ 2 ˤäƵޤ 2 ĤνƤͥ
٤㤤(궯⡼󤬲ݤƤ)Τǡ 2 ˤõǤϡǤ
ͥ٤ι⤤ƤȤƤϽϤƤޤ

ҥ塼ꥹƥ 1 ϽƤͥ٤ĤǡƤƤޤ
櫓ǤϤʤΤǡ¾ˤäȤ餷Ƥʤϡ 1 Ǽ褦
ʽƤ󼨤ƤޤޤĤޤꡢ뿼õԤʤäȤ
ޤ뽤Ƥտ̤ΤΤǤ뤫ɤϡ桼ʬȽǤʤФ
ޤ


4. ܤˡ (ޥɥ饤󥪥ץˤĤ)

ʲΥޥɥ饤󥪥ץѤ뤳ȤǤޤ

     ץ  
    -----------------------------------------------------------------
      +mode      ⡼̷⤹˾ʬѤޤ

      +type      ̷⤹˾ʬѤޤ

      +mis       ̷⤹˾ʬɽޤ

      +d <N>     N ĤޤǤν񴹤ԤʤäƽƤõޤ
                 N  0<N=<10 ǤʤФʤޤ

      +p <N>     ͥ N ޤǤνƤɽޤ
                  N  N>0 ǤʤФʤޤ

      +h         إפɽޤ


ǼʳΥޥɰϡ٤ƥե̾ǤȤƽޤ
¸ߤʤե̾ꤷƤϡKima μ¹Ԥߤޤ

ץ򲿤ꤷʤä硢ץ

  % kima +mode +type +d 1 +p 1  FILE1 FILE2 ...

Ȼꤵ줿ΤȤƼ¹ԤޤĤޤꡢ⡼ɤȷʻѤѿ1
ս񴹤뽤ƤõԤʤäơǤͥ٤ι⤤Ƥɽޤ

`+d'  `+p' ꤷ N Ϳʤä硢N  1 ǤȤƽ
ޤ `+mis' ꤷϡ˾ɽԤʤǡƤõ
ϹԤʤޤƱ˽Ƥ᤿ϡ`+mis +d' Τ褦˰˻
ɬפޤޤ `+h' ɬץƬǻꤹɬפޤ

̾ UNIX ޥɤΥץȰۤʤꡢץ `+' ǻϤޤäƤ
뤳ȤդƲKLIC Ϥˤä `-' ǻϤޤ륪ץ󤬻ѺѤ
Ǥ뤿ˡΤ褦ʻͤˤʤäƤޤ

ޤ `+d' ΰˤϡץǤ 10 ޤǤǤ褦ˤʤä
ޤ׻̤δط顢3 ʾοꤹΤϡǤޤä
ߤ Kima ver.2 ϡָΨŻΤ˶()Ψ˴ؤƸ
ˤʤäƤޤ


5. 󥹥ȡ

Kima ver.2  KL1 ǵҤƤꡢKLIC ϤȤäƥѥ뤷
ޤ󥹥ȡˡˤĤƤϡܥեƱͤۥåȤ˴ޤޤƤ 
INSTALL (INSTALL-j) 򻲾ȤƤ

ޤۥåȤϲΥե뷲ǹƤޤ

  (1) Makefile  -- make ե
  (2) Readme-j  -- ܥե
      Readme    -- ܥեαѸ
  (3) INSTALL-j -- 󥹥ȡޥ˥奢
      INSTALL   -- 󥹥ȡޥ˥奢αѸ
  (4) kima-main5.kl1 read_program4.kl1 normalize5.kl1 unify.kl1
      builtin_DB_st5.kl1 numberbuiltin3.kl1 findpath4.kl1
      constraints_st9.kl1 type_st2.kl1 stdinout2.kl1
      minsub.kl1 type_minsub.kl1 copygraph3.kl1 tcopygraph.kl1
      group_doubt2.kl1 generate_test5.kl1 gen_alt.kl1
      test_alt4.kl1 heuristics4.kl1 common2.kl1 probability.kl1
      command_line2.kl1 graphD.kl1 decode2.kl1 reduce6.kl1 sort.kl1
      outmessage4.kl1 tdecode.kl1 tgraph_st3.kl1
                -- Kima ver.2 Υץ ( 29 ե)
  (5) examples/append-error.kl1
               comb-error.kl1
               fib-error.kl1
               qsort-d2-error.kl1
                --  Readme ѤƤθޤץ


6. ̤εǽˤĤ

  (1) ץز(stratification)

  (2) θ򤵤˹ʤ 1, 2(ʸ[1])

  (3) ˴ؤ

  (4) ѿи(occur-check)

ä(1)̤Ǥ뤿ˡappend  length Τ褦¿إ⡼/
ץʣξ꤫ƤӽФȡwell-moded/typed ʥץǤ⡢
⡼/꤬ȯǽޤä˷˴ؤƿǤ
򤹤뤿ˤϡƤӽФȤƱνҸ¾̾ʣʤɤ
(ɥۥå)֤ȤʤФʤޤ


7. 

(1) ٥˥ȥ꡼(ѿ)򤽤Τޤ޳Ǽȡnon-well-moded ˤʤޤ
ϸߤ KLIC Ϥnew_vector/2 Ф new_vector(Vector,Integer) 
 new_vector(Vector,List) Ȥ2ĤλȤƤ뤫ǤKima ver.2 
 new_vector ٤ԤΤ褦˻ȤƤȲꤷƥ⡼ɤŤޤ
ΤȤKLIC Ϥϥ٥Ǥ򤹤٤ 0 ǽޤΤǡ٥
ǤΥȥåץ⡼ɤϤʤ餺 in ˤʤޤΤᡢout 󤵤륹ȥ꡼
(ѿ)٥ˤޤȥ⡼ɸޤ Kima ver.2 
ѤƤ Klint ver.2 ˤƤƱͤǤ

(2) ѿνԤʤ硢ˤѿפؤνθ
ɬפޤKima ver.2 ǤϡΤ `FreshVarN'(N  0  9 
ޤǤ) Ȥѿ̾ȤäƤޤΤᡢȤȤΥץ
Ǥ `FreshVarN' ȤѿȤƤȡƤ󼨤ʤ
ǽޤ`FreshVarN' Ȥѿ̾ѤϤǤ򤱤Ʋ

(3) Kima ver.2  Klint ver.2 ѤƤط塢Klint ver.2 ˤ
Τޤ Kima ver.2 ¤ˤʤäƤޤޤKlint ver.2 ǥݡȤ
Ƥʤ KL1 εǽˤĤƤϡKima ver.2 Ǥ⥵ݡȤƤޤ
Klint ver.2 ˴ؤƤϡʸ[5] Readme 򻲾ȤƤ


ʸ

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

[2] Cho, K. and Ueda, K., Diagnosing Non-Well-Moded Concurrent Logic
Programs, In Proc. 1996 Joint Int. Conf. and Symp. on Logic Programming
(JICSLP'96), The MIT Press, 1996, pp.215-229.

[3] 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.

[4] Ueda, K., Experiences with Strong Moding in Concurrent Logic/Constraint
Programming. In Proc. Int. Workshop on Parallel Symbolic Languages and
Systems, LNCS 1068, Springer, 1996, pp.134-153.

[5] Ueda, K., {\em klint} --- Static Analyzer for KL1 Programs.
Available from
http://www.icot.or.jp/AITEC/FGCS/funding/itaku-H9-index-E.html, 1998.

[6] , ¹ץ༫ư Kima ߷פȼ, 
ظʽʸ, 1998.
