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

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      ]