数学の=で考えられないから代入は矢印で書く

レポートをTeXで書いてる人がいるがよくやるなぁと思う。
まぁ確かに融通きくから確かにいい方法だと思う。
けど、結果を見ながら編集できないので直感的じゃないよね。
だから途中でコンパイルして確認しながらするわけだけど。
僕はOOoでやってるけど、気に食わん点が出てきたりするけど、それでもスピーディーにできますね。
毎週TeXでやってると、そのあたりは鍛えられるだろうね。


さて実験レポートの話。
前のZ80の実験のレポートを書いてたのだが、その中でフローチャートを書いていた。
それで見よう見まねで書いてたのだが、単純に言えば、□が動作、◇が分岐。
で、代入はA←A+1などのように書いてあることが多かったので、それに習った。
それはいいのだけど、分岐で条件を書きますと。
そこでB=0と書いたのだが、どうも違和感あるな。
Cではb==0のように書くからね。b=0は代入だ。そんなことがあるからB←64hのように書くんだと思うけど。
まぁそんなもんかと思ってやってたけどね。
けど、a=bで代入を表すとき、右辺を左辺に代入という意味を常識と思うか思わないかというのは難しい話だ。
だって、数学では「x+1=cのようにcを定める」でも「c=x+1のようにcを定める」でも同じだから。
だからこそ、矢印で書いてたんだろうね。これなら、A+1→Aでもいいことになる。気持ち悪いけど。


Cの気持ち悪いソースコードの例にこんなのがある。

void strcpy(char* so,char* si){
while(*so++ = *si++);
}

何か考えられる人は考えたらいいけど、whileの()内をどう解するかということだな。
後置き++は実行後に考えればいい、この=は代入の=、だからまずは(*so=*si)!=0と言った方がいいでしょう。
毎度*siの値を*soに代入して、それが0(NULL文字)でないか確認して、so,siを1づつ進めて、NULL文字でなければまた代入すると。
正直センス疑うけど、これがポインタの有効活用例の1つらしい。
=と==の違いを知らない人が混乱するのでもう少し方法を考えるべきだと思う。
だから疑似言語とかでは=は数学の=だけに使って、代入は矢印なんだな。