[前][次][番号順一覧][スレッド一覧][生データ]

langsmith:296

From: Dan Kogai <dankogai dan.co.jp>
Date: Thu, 15 Sep 2005 22:40:57 +0900
Subject: [langsmith:296] Re: なぜ代入演算子に限ってright associativeなのか?

弾です。

On Sep 15, 2005, at 21:01 , MAEDA Atusi wrote:
> (推測1) FORTRANの頃は,数学での「変数の定義」の書き方に 
> 近づけたかった.

これが大きいでしょうねえ。ただ、現在の電脳言語で「代入」するのは 
数値ばかりではないですからねえ。

> (推測2) 構文解析が楽だった.

うーん、こちらはあやしい。これを突き詰めれば Forth だし。

> (推測3)
>      式 → 変数
>   という文法だと,アセンブリ言語とか教科書のアルゴリズムくらい 
> の単純さ
>   なら良いが式が複雑になると読みにくいかも.
>   (これは,単なる慣れの問題かも知れないので,実際には分かりま 
> せん.)
>
> たぶん,みんながそれに慣れちゃったので,という歴史的な理由が大 
> きいんで
> しょうね.

結局慣れの問題がある一方で、CのPerlの慣用句で、

while((c = getc()) != eof){ ... }

とか

(my $foo = $bar) =~ s/.*:://;

とか、代入してすぐ評価したりというケースでは、 (左 
辺 ← 右辺)→右辺 と切り返しが多くて大変 
ですし、OOPでは

object.accessA(new_value).accessB(new_value).print

とか一貫して左→右なので。
あと、左←右で結構難儀だと思うのが、Schwartzian Transform.

@result = map { $_->[0] } sort {$a->[1] <=> $b->[1] } map { [$_ =>  
length($_) ]} @data;

というのは完全に右から左で、一行に収まりきれず複数行にまたがった 
時なんかは下から上ですし。これが Perl6 だと

@result = @data.map({ [$^x => $^x.chars] }).sort({$^a.[1] <=> $^b. 
[1]}).map{ $x.[0]};

と書けてずっとintuitiveになりますし、==> (piping  
operator)を使うと

@data ==> map { [$^x => $^x.chars] }
       ==> sort{ $^a.[1] $^b.[1] }
       ==> map { $^x.[0] }
       ==> @result;

とこれまた大変きれいに書けます。
もっとも perl6 では自分で任意の operator を書けるの 
で、

sub infix:<→>($from, $to is rw){
     $to = $from;
}

と定義しとけば

$from → $to;

と出来ちゃうわけですが。

# ==> が単純な代入に使えるかどうかは、Synopsis 6 を 
見ても今一明らかじゃない。まだPugsでも==>は実装され 
てないし。

#せっかく -> が空いたのに、これは lambda にとられ 
ちゃいましたね。

逆に左 ← 右でいいと思うのは、初期化のときですね。さ 
すがに

0 → my $n;

ってのはなんか気味が悪いので。

Dan the Assigning Man


--
ML: langsmith quickml.atdot.net
使い方: http://www.atdot.net/~ko1/quickml

[前][次][番号順一覧][スレッド一覧][生データ]

       293 2005-09-15 20:17 [dankogai dan.co.jp  ] なぜ代入演算子に限ってright  associativeなのか? 
       294 2005-09-15 21:01 ┣[maeda-langsmith atus]                                       
->     296 2005-09-15 22:40 ┃┗[dankogai dan.co.jp  ]                                     
       297 2005-09-16 09:47 ┃ ┣[takuo aya.or.jp     ]                                   
       298 2005-09-16 12:06 ┃ ┃┗[maeda-langsmith atus]                                 
       299 2005-09-16 12:37 ┃ ┗[maeda-langsmith atus]                                   
       295 2005-09-15 21:38 ┗[shiro lava.net      ]