J言語研究会資料 2005/10/22

 

Jで連想配列を実現する

 

J and Group(志村)をもとに私なりのプログラム

 

西川 利男

 

 BASIC, Cなど大多数のプログラミング言語では,配列のインデックスは整数でなくてはならないが, Perlなどにはこれを文字列で行える機能があり,連想配列と呼ばれている.

 前回の志村正人氏の発表からヒントを得て,Jでも連想配列が行えるようプログラムを作ってみた.文字列としては英数文字だけでなく,日本語も可能である.なお,項目が不在の場合もインデックス・エラ−とならないよう考慮してある.

 このようなTable Lookupのプログラムはデ−タベ−スの検索,さらには機械翻訳などへも極めて有用であろう.

 

 

NB. Associative Array 連想配列 in J

NB.   by T. Nishikawa 2005/9/27

  

NB. Table Look Up

lookup =: 3 : 0

:

D =. x.

DA =. {. "1 D

if. 32 = 3!:0 DA         NB. adjust missed items/test character string

 do.                     NB. yes / boxed character string

   MIS =. (,.(-. y. e. DA)#y.) ,"(1) <'***'

 else.                   NB. no / number etc.

   MIS =. (,.(-. y. e. DA)#y.) ,"(1) _

end.

DD =. D,"2 MIS

(({. "1 DD) i. y.) { DD  NB. look up keys and items

)

 

 

 

 

NB. Data originally from Shimura's J and Group 2005/9/24

b =. 5 6 6 3 7 19 8 15 9 10 10 14 11 0 12 7 13 12 14 17

b =. 10 2$b

 

   b lookup  7 3 5 2 10

 7 19

 3  _

 5  6

 2  _

10 14

 

NB. Character String Data

A =. 'apple';'grape';'banana';'pear';'nut'

B =. 'red';'blue';'yellow';'white';'brown'

DIC =: A ,. B

 

   DIC lookup ;: 'banana grape melon nut'

+------+------+

|banana|yellow|

+------+------+

|grape |blue  |

+------+------+

|melon |***   |

+------+------+

|nut   |brown |

+------+------+

 

NB. 日本語文字列のデータ

C =: '東京';'長野';'京都'

D =: '浅草寺';'善光寺';'清水寺'

MEISHO =: C ,. D

 

   MEISHO lookup '東京';'名古屋';'京都'

+------+------+

|東京  |浅草寺|

+------+------+

|名古屋|***   |

+------+------+

|京都  |清水寺|

+------+------+