疑問ととりあえずの答

98/4/22版
疑問
なぜ、コンパイルが必要なのか。プログラムを実行時に解釈すればいいじゃん
とりあえずの答
通り一遍の答を書いておくと、コンピュータは機械語しか理解できないから、 プログラムを機械語に翻訳してやらないといけないわけで、それがコンパイル なのです。 そうはいっても、コンパイル不要の言語もあります。 昔、パーソナルコンピュータといえば BASIC言語に決まっていたころのBASICはインタープリタといって、 実行時にその場で言語を解釈していました。 AWKとかPERLとかRUBYなどのいわゆるスクリプト言語もコンパイル不要です。 もっとも、スクリプト言語の場合、まずプログラムを解釈するためのソフトウェアを 実行するんですけど(それは、むろんコンパイルされている)。 将来的にはコンパイルなんて作業は必要なくなるんでしょう。

疑問
一個所間違えただけなのに、エラーメッセージがたくさん出た。
とりあえずの答
しょうがないっす。たとえば、括弧の閉じ忘れがひとつあるだけで、 後ろのほうまで間違いになっちゃいますよね。 計算機は「ここの括弧が抜けてるから、補ってやろう」なんてことはしてくれない から。 なので、たくさんエラーメッセージが出ても、一度に全部を見たりせず、上のほうから ひとつずつ片づけていくほうが賢いでしょう。一個所なおしてコンパイルしなおすと、 いきなり全部オッケーになったりもします。

疑問
x=x+1.0 とか書くと気持ち悪い
とりあえずの答
気持ち悪いですね。これを等式だと思ってしまうと、これ が成り立つのはxが無限大のときですか。 プログラムでは"="が等式じゃなくて、”代入”を表わすんですね。 だから、これは「変数xに1.0を足して、その結果を再び変数xに代入せよ」と読む。 これが等式と同じ格好になってるのがいけないんで、たとえば
 x+1.0 => x
とかいう表記法だったらよかったんだよね。代入に等号以外の記号を使う 言語もあります。そのほうがわかりやすいよな。 等式じゃないから、等号の 左右を入れ替えてはいけなくて、右辺は計算式、左辺は代入先と 決まっている。 これじゃ気持ち悪いし、両辺にxが出てくるのは無駄だし、ってんでC言語では
 x += 1.0
という表現が使えるようになってるんでしょう。 意味は同じでも、これなら「変数xに1.0を足せ」 と読めばいいから、まだしもわかりやすいかもしれない。 さらにループ変数のように整数変数iに1を足すときは++iとかi++ とかいう便利な表記も使えるので、わかりやすいと思う。

ちなみに、じゃあ「等しい」はどう表わすのかといえば、C言語なら"="ではなく "=="という記号を使う。逆にしたほうがよかったかもね。FORTRANは".EQ."。 ただし、これらは正確にいうと「等しい」ではなくて「等しいかどうか」という 比較操作を意味するものなので、等号とはやっぱり違うのだった。 要するに、CにもFORTRANにも”等号”というものは存在しないのだ。


疑問
C言語のprintf文中で%fと%dはどう違うんじゃい
とりあえずの答
変数が実数か整数かで使い分けないといけない。 実数変数を%dで出力させると、計算機は整数だと思って出力しようとするので、 なにがなんだかわからなくなります。はじめに型宣言したじゃないか、 と思うかもしれないけど、もしかしたら、実数変数を本当に%dで出力させたい 人だっているかもしれないよね。

疑問
C言語のほうがはやりなのに、数値計算の本はFORTRANが多いし、研究室でも FORTRANを使ってる人が多い。どっちを使えるようになったらいいんじゃい。
とりあえずの答
どっちでもいいんだけど、こと数値計算に関する限り、歴史の違いは いかんともしがたくて、FORTRANには膨大な蓄積があるんだよね。 もっとも、Numerical RecipesにもC版があるから、Cで困ることはないでしょう。 大型のスーパーコンピュータだと、今のところFORTRANじゃないとうまく いかないことが多いですけどね。

疑問
Syntax errorってなんじゃい
とりあえずの答
Syntaxは構文。ようするに、プログラム言語の文法上の誤りのこと。 これじゃ、あんまり情報ないよね。