作者: 藤岡和夫
日時: 2004/8/15(23:42)
私も気になっていたので、よく眺めてみました。

map{($_ => 1)}@hoge1

の部分は、@hoge1の配列要素をキーに値を1として連想配列を初期化している。

($_ => 1) の ()は不要だろう。なぜなら、

{map{$_ => 1}@hoge1}

で、無名ハッシュへのリファレンスとなる。

${{map{$_ => 1}@hoge1}}{KEY}

で、KEYの要素について無名ハッシュをデリファレンスする。

grep{${{map{$_ => 1}@hoge1}}{$_}}@hoge2

は、@hoge2の各要素をキーとして、@hoge1の配列要素をキーとした無名ハッシュ
を真偽評価してgrepすることになる。従って、@hoge1の配列要素を一つずつ、
@hoge2の配列要素に等しいものがあるかどうかを確かめ、等しいものがある場合
にその要素を出力する。

と解釈できると思いましたです。
--
藤岡

On Sun, 15 Aug 2004 22:41:49 +0900
dune <FZH01112@...> さんwrote:

> 王虎 さんの [TSperl:425] 配列の積と差 から
> >2ちゃんねるのPerlスレで見かけたのですが、配列(リスト)の積と
> >差を求めるのに以下のような手法が挙げられていました。
> 
> 2ch は見ずに「配列の積」と「配列の和」ってなんだろう?
> スカラー積でもなさそうだしなぁ、というところで思考停止して
> ました。今日まじめに見てやっとわかった。
> 
> >print grep{${{map{($_ => 1)}@hoge1}}{$_}}@hoge2;
> 
> @hoge2 の要素の数だけ %{{map{($_ => 1)}@hoge1}} が実行
> される(作っては捨てられを繰り返す)のがイヤらしいので、
> $c = { map{($_=>1)} @hoge1 }; として再利用するように、
> 
> print grep{${$c||={map{($_=>1)}@hoge1}}{$_}}@hoge2;
> 
> とするならいいかな。わかりやすくなって面白味が減るけど。
> 
> -- 
> 極悪, FZH01112 at nifty.com
> http://hpcgi1.nifty.com/dune/gwiki.pl?

藤岡 和夫
FGALTS@...
kazuf@...
TS Networkのために http://homepage1.nifty.com/kazuf/