鍋あり谷あり

テーマを決めずに適当に書いています。

左辺値に条件演算

先日書いた

(a<b?a:b)=0 

の類。
rubyでもjavascriptでも文法エラーだった。
rubyについてはまあそうかなと思ったんだが、javascriptで通らないのはちょっと意外であった。
よく考えると、あるいはよく考えなくても、なんとなく不自然な式である。
条件式の結果を左辺に書ける言語って、C/C++以外にあるのだろうか。
当然BCPLが有望なわけだが、処理系がない。

左辺値に条件演算続報

朝電車の中で、w-zero3[es]でちろっと書いた記事が、リンク元の記録を見る限り500以上のアクセスを集めてちょっとびっくりした。ブックマークやトラックバックもついてるし*1
で。
ちょっと解説じみたことを。

(a<b?a:b)=0 

だと妖しげだが、

int & smaller( int & a, int & b )
{
  if (a<b){
    return a;
  } else {
    return b;
  }
}

という関数があれば

int a=1, b=2;
smaller(a,b)=3;

と書けるのは普通というか、書けないとおかしい。

条件演算と smaller 関数は同等なので、条件演算は左辺値になる。
で。
コメント欄でご指摘いただいたとおり(ご指摘ありがとうございます>id:hzkrさん)、C言語では条件演算の結果に代入できない。これは、C言語には参照型がないからで、前述の smaller 関数も書けない。
ということに、電車の中では気づいてなかった。とほほ。
同じ理由で hzkr さんのおっしゃるとおり、BCPL は有望じゃないと思う。

さらに。
dankogaiさんが書いておられるとおり(トラックバックをいただく前に気づいていたのに、くやしー)、perl も (a<b?a:b)=0 が通る。と思ったら変数の前に $ が要るのか。とほほ。

python にはこの手の演算子がないような気がするんだけどどうだろう。PHPは未調査。
vbscript にもなさそう。
あと気になるのは C# かな。

*1:因果関係が逆か