作者: Bruce.
日時: 2009/3/05(21:20)
Bruce.です。

davi さんは書きました:
> work[oldstr[i]]は、「配列の配列」ですか?

ちゃいます。
配列の添え字に配列要素の値を使っているだけです。


> 
> でもこの例だと、大文字と小文字の場合は重複しないですよね?
> 
>> 事情が良くわかりませんが、
> 
> 例えば、「Rot13をテーブル定義の置換でやる場合、どうすんの?」
> ってことです。

rot13ですか。アルファベットだけでやってみると

tbl['A'] = 'N'
tbl['B'] = 'O'
tbl['C'] = 'P'
tbl['D'] = 'Q'
tbl['E'] = 'R'
tbl['F'] = 'S'
tbl['G'] = 'T'
tbl['H'] = 'U'
tbl['I'] = 'V'
tbl['J'] = 'W'
tbl['K'] = 'X'
tbl['L'] = 'Y'
tbl['M'] = 'Z'
tbl['N'] = 'A'
tbl['O'] = 'B'
tbl['P'] = 'C'
tbl['Q'] = 'D'
tbl['R'] = 'E'
tbl['S'] = 'F'
tbl['T'] = 'G'
tbl['U'] = 'H'
tbl['V'] = 'I'
tbl['W'] = 'J'
tbl['X'] = 'K'
tbl['Y'] = 'L'
tbl['Z'] = 'M'
tbl['a'] = 'n'
tbl['b'] = 'o'
tbl['c'] = 'p'
tbl['d'] = 'q'
tbl['e'] = 'r'
tbl['f'] = 's'
tbl['g'] = 't'
tbl['h'] = 'u'
tbl['i'] = 'v'
tbl['j'] = 'w'
tbl['k'] = 'x'
tbl['l'] = 'y'
tbl['m'] = 'z'
tbl['n'] = 'a'
tbl['o'] = 'b'
tbl['p'] = 'c'
tbl['q'] = 'd'
tbl['r'] = 'e'
tbl['s'] = 'f'
tbl['t'] = 'g'
tbl['u'] = 'h'
tbl['v'] = 'i'
tbl['w'] = 'j'
tbl['x'] = 'k'
tbl['y'] = 'l'
tbl['z'] = 'm'

として、

str = "TSabc"

にたいして

for i in 0..length(str)
  result[i] = dst[str[i]]

とすると、resultにrot13した結果が入るということです。
sedのtrも基本的な原理はこれと同じです。


> 先に置換しちゃったものを、その後の定義で、もう一度
> 置換されちゃうと困るよねぇ?、と。
> 
> trとかで、それが上手く動いているのが、どうしても理解も
> 納得もできないのですよ。
> 
> wikipediaにある「Pascalによる原理的実装」の例では、
> バイナリそのものを演算していじっているようです。
> テーブルによる置換の実装の例そのものではなさそう…。
> 
> --------------------------------------------
> 
>> 事情が良くわかりませんが、そこまである文字が出てくる「文脈」に
>> 依存するのなら話は簡単じゃないと思いますが。
> 
> この話題のずっと先には、「翻訳ソフトは、内部でどんな
> 処理をしているんだろう?」という疑問があります。
> 
> そんな話題をabcでやるのが適切かどうかはわかりません。
> 
> また、今の所は、「自分で実装できるようになりたい!」という
> よりも、「リクツとしては、どういう考え方なの?」という
> 探求心の段階なのですが。
> (そりゃ、自分で実装できればカッコイイなぁ、とは思いますが、
> オノレの“分”を知るということも大切ですな…。)
> 
> 
> でび  http://davi.txt-nifty.com/1984/
> 
> 
> 
> 


-- 
木村浩一/KIMURA Koichi
 I thought what I'd do was, I'd pretend I was one of those deaf-mutes or
shoud I?
 mail kbk at kt.rim.or.jp
 web  www.kt.rim.or.jp/~kbk/zakkicho/index.html