langsmith:294
From: MAEDA Atusi <maeda-langsmith atusi.org>
Date: 15 Sep 2005 21:01:57 +0900
Subject: [langsmith:294] Re: なぜ代入演算子に限ってright associativeなのか?
Dan Kogai <dankogai dan.co.jp> writes: > blogにも書いた(http://blog.livedoor.jp/dankogai/archives/ > 50084596.html)のですが、なぜほとんどの言語で、代入演算子に限って > left associative なのでしょうかねえ? perlの場合、二項演算 > 子で right associative なのは、= (+=などを含 > む)を除くと ** ぐらいです。**がright > associativeなのはまだわかるのですが.... ええと,Danさんの意図としては,「左辺 ← 右辺 だから right associative になっているのは分かるが,そもそも 左辺 ← 右辺なのはなぜ?」というこ とでよろしいでしょうか? FORTRANと同じくらい古いCOBOLだと,単純な代入は MOVE '1' TO N. なのに,式を評価して代入する時は COMPUTE N = (A + B) * C ですね.たしかに不思議. アセンブリ言語だと, MOV dest, src というCPUも, MOV src, dest というのも,どちらもあるのにね. (推測1) FORTRANの頃は,数学での「変数の定義」の書き方に近づけたかった. 「A = 2 * X + Y とおく」 というとき,値を「定義」する変数が左に来るのは自然と感じたのでしょう. (日本語だと「2 * X + YをAとおく」でも良いのだけれど,英語だと let A be 2x+y のように,変数が先頭に来る.) COBOLのCOMPUTE文でも,BASICのLET文でも,そういう気持ちが現れているのかも. (推測2) 構文解析が楽だった. たとえば代入を := で書くPascalでは,文の先頭に 予約語forが来ればfor文, 予約語ifが来ればif文, ... 変数名が来れば代入文 となっています. (推測3) 式 → 変数 という文法だと,アセンブリ言語とか教科書のアルゴリズムくらいの単純さ なら良いが式が複雑になると読みにくいかも. (これは,単なる慣れの問題かも知れないので,実際には分かりません.) たぶん,みんながそれに慣れちゃったので,という歴史的な理由が大きいんで しょうね. 前田敦司 -- 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 ]