Togetter/min.tを安心してお使い頂くためのガイドラインを公開しました。
編集可能

珠玉のプログラミング言語で試す「6÷2(1+2)=?」

「6÷2(1+2)=?」を正しく計算できるプログラミング言語があるのかをいろんな人が試しました(ほとんどoota_kenさんですが)。
21
しんすく(け) さん。 @snsk

うそーん^-^; :「上のエントリーでは「6÷2(1+2)=1は間違い、正解は9」としているが正解は「1」である。」 :6÷2(1 2)=9と発表しているバカガジェット通信 http://anond.hatelabo.jp/20110507090156

2011-05-08 11:13:51
Kenichiro Ota @oota_ken

@snsk これコンパイルエラーになる言語多そうじゃないですか?演算子の結合強度以前にマスマティカぐらいしかとおらない予感。

2011-05-08 11:19:40
しんすく(け) さん。 @snsk

@oota_ken YES。javascript:alert(6/2*(1+2)); ならとおりますが、* をとると動かないすね^-^;

2011-05-08 11:23:52
はるーる @halu_lu

@snsk 答えはどっちなんですかー?ヽ(;▽;)ノ

2011-05-08 11:25:03
Kenichiro Ota @oota_ken

@snsk ちょっといくつかの言語で試してみますね!

2011-05-08 11:26:59
しんすく(け) さん。 @snsk

@harukaloryy 静岡大学の人的には1っぽいねー(T-T) ただ、少なくともChromeのJSパーザはこういう解釈はしない。わからないす(T-T) http://bit.ly/jUjWDt

2011-05-08 11:32:46
Kenichiro Ota @oota_ken

6/2(2+1) の調査 Ruby, Perl, C#, Javaともコンパイルエラーw できる言語どこにあんだ?

2011-05-08 11:36:52
Kenichiro Ota @oota_ken

なんと、Googleの検索でできたよwww 6/2(2+1) でもGoogleでは演算子の結合順序が違うってか、2(2+1)は2 * (2+1)の省略形とみなされその後式が評価されるから結果は 9になるよw

2011-05-08 11:41:29
Kenichiro Ota @oota_ken

Google先生 6/2(2+1) => (6 / 2) * (2 + 1) => 9 となる

2011-05-08 11:42:40
Kenichiro Ota @oota_ken

ちなみにPowerShellも6/2(2+1)はコンパイルエラー(式評価エラー)

2011-05-08 11:47:21
Kenichiro Ota @oota_ken

ってことで、Google先生以外僕の使う言語ではだめでした・・・あとはシェルスクリプトぐらいだけど・・・もーいーや、あのBlogは一体何の言語で評価したんだろう。試してないだけの脳内言語じゃ演算子の結合規則なんて言語依存なので嘘だぞ。

2011-05-08 11:49:17
Kenichiro Ota @oota_ken

2(2+1)な風に書いて結合される言語なんて僕マスマティカしか見たことないんだけど、他にあるんかしら。いまんところGoogle先生以外全滅どす。

2011-05-08 11:56:10
Kenichiro Ota @oota_ken

だが、F#ならやってくれる、F#ならやってくれる!てことで試す。

2011-05-08 12:00:18
Kenichiro Ota @oota_ken

F#でも、だめだっただぬ・・・

2011-05-08 12:01:55
Kenichiro Ota @oota_ken

ちなみにTL上でみると、Objective-CとJavaScriptでも駄目な模様・・・唯一パースできるGoogle先生の電卓は半端ねっす

2011-05-08 12:03:03
Kenichiro Ota @oota_ken

なんか、ばかばかしい試みな気がするので、Silverlightの勉強に戻ろう。たぶん、Blogの彼は軟化の言語で試したわけじゃなくて頭の中で考えたことなんだろう・・・

2011-05-08 12:04:29
Kenichiro Ota @oota_ken

@snsk 結合度の頭の体操にはなりましたが、やはり何かの言語で裏付けを取ってほしかったです。

2011-05-08 12:07:55
Kenichiro Ota @oota_ken

そうですね。なぜかGoogle先生は違う結合で評価してしまっていますがw RT @hirosawatomoya: @oota_ken たぶん、(通常の)プログラミング言語ではミス防止のために、演算子がなかったらエラーでこけるようになってるんでしょうね。

2011-05-08 12:08:31
Kenichiro Ota @oota_ken

だが待ってほしい・・・Excelが残っていたではないか!

2011-05-08 12:08:58
Kenichiro Ota @oota_ken

Excel 2010ではなんと、エラー自動訂正機能で 6/2(2+1) => 6/2*(2+1)ってなったーーー ってか、やっぱり普通こっちだろう。多分2(2+1)が仮に先に評価されてもRubyだとメソッド呼び出しになると思うのでそんなのねーよってことで終了

2011-05-08 12:11:11
Kenichiro Ota @oota_ken

もはや手元に試せる処理系がないので、あきらめます。とりあえず、唯一処理できたGoogle先生は 6/2(2+1) => (6/2) * (1+2) => 9 と評価しました。以上!

2011-05-08 12:18:04
suginoy @suginoy

@oota_ken おお!結局GoogleとMSしかその問題に答えられないってことじゃないですか。

2011-05-08 12:22:59
Kenichiro Ota @oota_ken

@suginoy が、Google先生は言語処理系としては間違っている答えがwww

2011-05-08 12:25:26
suginoy @suginoy

@oota_ken あ、間違いなんだw ということは、Excel最強で、方眼紙信者の主張を強化することに。。

2011-05-08 12:29:24
残りを読む(47)

コメント

しさし @shisashi 2011年5月9日
Bingのエンジンにも使われているWolframAlphaの結果 http://goo.gl/Uq3mL
0
裏技君 @urawazakun 2011年5月9日
参考になるわ。でも、算数だから省略自体に論理的矛盾があるってことでFAすればいいんじゃないかな。
0
小奥(こーく)@欲の器 @tk2to 2011年5月9日
「一般に結合力は多項式が一番強い」って、誰が決めて認めたルールなんでしょ。数学音痴にはマジでどっちが正しいのか分かりません。検索エンジンの信頼度でいえばこういう事にはWolfram先生が一番強いと思うんですが。
0
柴田秋 @aki7ito 2011年5月9日
「正しい」「正しくない」の話なのかな。そう計算するように設計したって話では?
0
へすた! @Hesta 2011年5月9日
じゃあ6÷2aだと3aなの?aぶんの3なの?とか引っ掻き回す事を言って見る
0
へすた! @Hesta 2011年5月9日
じゃあ6÷2aだと3aなの?aぶんの3なの?とか引っ掻き回す事を言って見る
0
○○もへじ @marumarumoheji 2011年5月10日
ちなみに windows の電卓を関数電卓モードにして 6 / 2 ( 1 + 2 ) と入力すると答えは”2”
0
りにゃん(ねこにん/しゅきかん/おまぬけ) @marinyan 2011年11月14日
PHPだと「Parse error: syntax error, unexpected '(', expecting ',' or ';' in ほげ\ふが.php on line 2」って怒られました。
0
吉村ことり@GameDesign/PG/3DCG案件よろず引受〼 @urdcat 2011年11月14日
そもそもプログラミング言語の数式≠数学の数式、最初から論点が違う。言語の数式で*を書く必要性はパース上の問題回避と云うより仕様。あと左から右に式を解釈すると明記している言語も有るし。演算順序を確保するなら()で括れ、は、大抵の言語で書いてあることですし。
0
dummy_index @dummy_index 2012年9月7日
みんな無条件で"÷"を"/"に置き換えてる! まあ「プログラミング言語」の文脈だから仕方ない気はしますが。(歴史的に、整数除算含めた除算を"/"で代用するしかなかった)
0
dummy_index @dummy_index 2012年9月7日
これを読むと、少なくとも英語圏では「"/"による除算」であることが意味を持っているみたいなんですよね Order of operations - Wikipedia(en) http://en.wikipedia.org/wiki/Order_of_operations
0
dummy_index @dummy_index 2012年9月10日
p - 1とp -1が違う意味になるRubyの例もあることなので、6/2(1+2)と6/2 (1+2)が違うことがありえる…
0