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

langsmith:299

From: MAEDA Atusi <maeda-langsmith atusi.org>
Date: 16 Sep 2005 12:37:55 +0900
Subject: [langsmith:299] Re: なぜ代入演算子に限ってright associativeなのか?

Dan Kogai <dankogai dan.co.jp> writes:

> > (推測2) 構文解析が楽だった.
> 
> うーん、こちらはあやしい。これを突き詰めれば Forth だし。

Pascalに限っていうと,構文解析の簡単さが,シンタックスにかなり影響して
るのは確かです.gotoの飛び先ラベルに名前が使えない(符号なし整数しか使
えない)とか.

> 結局慣れの問題がある一方で、CのPerlの慣用句で、
> 
> while((c = getc()) != eof){ ... }
> 
> とか
> 
> (my $foo = $bar) =~ s/.*:://;
> 
> とか、代入してすぐ評価したりというケースでは、 (左 
> 辺 ← 右辺)→右辺 と切り返しが多くて大変 

「値と副作用の両方を使う」という(いかにもC的な)ちょい邪悪なプログラミ
ングで,しかも「数学的な2項演算子の表記法を維持したい」となると,この
「行ったり来たり」に人間が合わせざるを得ないですね.

> ですし、OOPでは
> 
> object.accessA(new_value).accessB(new_value).print
> 
> とか一貫して左→右なので。

この場合も,メソッドの引数の中に副作用があると,かなり混乱しますね.
Javaでは評価順序がきっちりしてますが,C++とかだと「未定義動作」とか
言われそう.

> あと、左←右で結構難儀だと思うのが、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;
> 
> とこれまた大変きれいに書けます。

Perlは良く知らないんですが(あまりに覚えづらいので手を出しかねている)
map なんてのは関数型言語やLispから持ってきた表記なんでしょうね.
Lispでは(当然)右から左でも,何の違和感もありません.

piping operator というのは良くわかりませんが, . 演算子と代入を合わせ
たものなんでしょうか.mapする関数の引数が複数あったらどうなるのかな.

> 逆に左 ← 右でいいと思うのは、初期化のときですね。さ 
> すがに
> 
> 0 → my $n;
> 
> ってのはなんか気味が悪いので。

ま,←と→と両方使うのは混乱しそうなので,どっちかに統一するでしょうね.
特に理由がなければ,どの言語も←に合わせてて良いんじゃないかと思います.

				前田敦司

--
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      ]