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 '東京';'名古屋';'京都'
+------+------+
|東京 |浅草寺|
+------+------+
|名古屋|*** |
+------+------+
|京都 |清水寺|
+------+------+