On Mon, 16 Aug 2004 01:07:43 +0900
藤岡和夫 <kazuf@...> さんwrote:
> > print grep{${$c||={map{($_=>1)}@hoge1}}{$_}}@hoge2;
>
> うーむ、||= なんて代入演算子があるとは(^^;)知らなかった。
>
> この文のどこから優先的に実行されるのだろうと思うのですが、、、、文脈的
> には、map 関数からとは思うが、関数的に見ると、$_ が同じ値を持たないのは
> へんとも思う。関数的に評価が進行すると $_ が @hoge1 に含まれる数の場合の
> み、grepのブロックの式が真となるわけですね。map 関数の動作を考えるとへん
> な気がするのは致し方ない???
いろいろ調べたけど、grep 関数の中で map 関数を使っている例は他にはないよ
うでした。並置して使う例はごまんとあるけど・・・
内部的に実際のところどう動いているのだろうと悩むよりは、
@hoge1 = (3,1,2);
@hoge2 = (1,2,3,1,2,3,4,5,6);
$c = {map{$_ => 1}@hoge1};
print grep{${$c}{$_}}@hoge2;
のように書くのが精神衛生上は良いかも?
藤岡 和夫
FGALTS@...
kazuf@...
TS Networkのために http://homepage1.nifty.com/kazuf/