BetaNona の回答履歴
- チューリングの停止性問題
チューリングの有名な停止性問題ですが、 「全てのプログラムMと全てのデータIに対して、 (1)M(I)が有限時間で停止するなら、H(M, I)は有限時間でYESを出力して停止する。 (2)M(I)が無限ループに入って停止しないなら、H(M, I)は有限時間でNOを出力して停止する。 ようなプログラムHは存在しない。」 という趣旨だと思うのですが、 人間(優秀なプログラマー)がM(I)を解読すれば、そのプログラムが有限時間で終わるか無限ループになるかは判断できるように思うのですが、この停止性問題はこの人間の判断もできないと言っているのでしょうか?それとも人間には判断できるが、それをプログラムに書いて機械に判断させることはできないといっているだけなのでしょうか?
- ベストアンサー
- その他(プログラミング・開発)
- tmiyoshi
- 回答数5
- JavaにはなぜGO TO 命令がないのでしょうか?
皆さん教えて下さい。私はCOBOLを長年手がけ、最近Javaを勉強している者です。 JavaにはなぜGO TO 命令がないのでしょうか? IF ネストというのは、わかりにくく、私は昔から嫌っておりました。 ところがJavaにはGO TO 命令が無いため、いやでもIF ネストを使わねばならないようです。 それともわかりやすく効率的なコーディングが別にあるのでしょうか?? 3択の問題で、下記AはJavaの教科書的コーディングです。3択だからまだしも複雑になると、IFネストはわかりにくいと私は思います。 下記Bはわかりやすいですが、無駄な処理が発生し、良くないコーディング例です。 下記CはCOBOLコ-ディングで、GO TOが使えるため、人間が読んでわかりやすく、処理効率もいいです。 ●この点Javaをやっている皆さんどうお考えですか??? ------------------------------------------------------------------------------------ A<教科書的サンプル> if(a > 0){ System.out.println("aは正の値です。"); }else if(a == 0){ System.out.println("aはゼロです。"); }else{ System.out.println("aは負の値です。"); } ------------------------------------------------------------------------------------ B<if ネストを嫌った サンプル> if(a > 0){System.out.println("aは正の値です。");} if(a == 0){System.out.println("aはゼロです。");} if (a < 0){System.out.println("aは負の値です。");} 処理効率悪く、良くないプログラム例 ------------------------------------------------------------------------------------ C<COBOL なら> IF a > 0 DISPLAY "aは正の値です。" GO TO OWARI. IF a = 0 DISPLAY " aはゼロです。" GO TO OWARI. IF a < 0 DISPLAY " aは負の値です。" . OWARI. . GO TO 命令がある故に効率的 IF 構文の終わりと、OWARI の後ろにピリオドがあります。 ------------------------------------------------------------------------------------