わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

時刻+時刻,時間+時刻

だいぶ前に問題意識を持ったことのある話が,出題されていました.第8話です.*1

次の【問1】〜【問4】の計算の答えはどうなるのでしょうか?
【問1】(2時間)+(3時間)=?
【問2】(2時)+(3時)=?
【問3】(2時)+(3時間)=?
【問4】(3時間)+(2時)=?
(p.51)

【問1】と【問3】は問題ないとして,まず見ておきたいのは【問2】です.この本での「正解」は,「考えられない(計算できない)」(p.54)です.
時刻同士の和を求めることができないのは,アドレス演算と時間演算で書きました.
しかし上の本には,さらに踏み込んで,ダメな理由が説明されています.
「(2時)+(3時)=(5時)」とし,他の時刻間についても同様に加法を定義したとき,日本の2時と3時は,中国では時差によって1時と2時になり,日本では(2時)+(3時)=(5時)なのが中国では(1時)+(2時)=(3時),あれっ時差が2時間になっていませんかっとのこと.
そして【問4】も「考えられない(計算できない)」です.教育学部の3年生42名が解いたところ,誤答が正答を上回っていました.「量」になる「(3時間)」に,「時点」になる「(2時)」を足すっておかしいよね,というのが著者による理由のコアな部分です.
ここは,アドレス演算と時間演算の違いといってもいいのかもしれません.Cのポインタ演算では,pをポインタ,iを整数としたとき,p+i,i+pのどちらで書いても文法上は*2かまいませんし,その評価結果は等しくなります.
なのですが…そのお話の最後の段落については,賛成できない箇所があります.

「時点・地点」と「量」との視点へのこだわりは,習慣的に扱ってきたこれまでの指導内容や方法への見直しを迫ります。例えば1次関数y=ax+bは,axが地点からの増減量を表し,切片bが地点を表すと捉えられます。(時間)+(時刻)に意味がないように,「量」に「時点・地点」を足すのは不自然です。本来は,y=ax+bではなく,y=b+axと扱ったほうが自然で本質的と考えられます。
(p.55)

対象を,「1次関数y=ax+b」に基づいて式に表したり,その式から計算などをする際には,増減量や地点といった情報が切り捨てられます(「捨象」ですね).(時間)+(時刻)ではなく(時刻)+(時間)なのだというのを強調したければ,y=b+axと表記すればいいのですが,それだと1次関数ではない(その定式化では,1次関数の諸性質を活用できる保証がない)ことになります.
連想するのは余りのある等分除・再考です.「14個=2個/枚×5枚+4個」「14個=1個/枚×5枚+9個」ともに,「(被除数)=(除数)×(商)+(余り)」の関係に合致していません.ですがいずれも,そのように表せる場面を考えることができます.
もう一つ,引っかかったのは,「y=ax+bではなく,y=b+ax」のところです.中学高校ではy=ax+bでいいのですが,大学では,例えば回帰直線の式にy=a+bxと表記するのが目立ちます*3.プログラミングでは,多項式はy=a0+a1x+a2x^2+…と,昇順で表記することによって,配列に自然に格納でき,多項式同士の和や積も素直に処理できます.
まあこういうところでがやがや言っているのは,(一つ分の大きさ)×(幾つ分)=(全体の大きさ)でかけ算を学んでいる子に,「外国ではね…」と言っているようなものなのですが.

*1:某年月日,【問4】を訂正しました.訂正前は「(2時間)+(3時)=?」でした.

*2:もちろん実用上の違いはあって,例えば演習科目でコードレビューしていて,i+pに出くわしたら,コードの前後や他に作っているファイルを見比べた上でですが,たぶん,慣習に合っていないといったコメントを返すことになるでしょう.

*3:wikipedia:線形回帰, Rと回帰分析