0020 大目標: 文字利用と関数の理解¶
復習¶
前回, 変数の処理という「壁」の話をしました. なぜ変数が大事かというと, 関数を理解・応用する上で大事な概念だからです.
となると, そもそもなぜ関数が大事なのかという話が出てきます. 詳しい話, 特に応用の話は前回紹介した二講座にまかせることにして, ここではまず中学数学の視点・プログラミングの視点から, 関数を簡単に紹介します.
高校数学の視点を簡単に¶
関数は高校数学でも大事です. 明らかに高校数学のハイライトは三角関数・指数関数・対数関数などの関数であり, それらの微分積分だからです. そしてこれらの関数は大学の数学, もっと言えば統計学のように役に立つ数学でも大事です.
もちろんここでは中学数学がメインなので, 上の話は範囲外ではあります. ただ, 大事なことではあるので, ぜひ簡単にでも頭の中に置いておいてください.
関数とは何か?¶
さて, 関数です. これらは中学でも一次関数・二次関数として出てきます. 他にもいろいろな形で陰に陽に出てきます. 特にプログラミングと絡めることまで考えれば, その中で中学・高校ではふつう関数とはみなさない対象が, プログラミングの中で関数として出てきます.
関数が何か, 一言で言えば次のように書けます.
- 何かと何かを対応させること.
- 特にある入力に対して何かを出力すること.
何かしらの対応があるなら, その時点でそれは何であっても関数です. プログラミングでも同じです.
一次関数と直線¶
先に数学の例を挙げましょう. 一次関数のグラフは直線です. これが何を言っているかというと, 一次関数は数を入力すると数を出力してくれます.
特にこの数と数の対応を平面上に描くと直線になります. この場合の関数は対応の様子を絵に描けます. 二次関数も同じです.
絵に描けない関数¶
中学・高校での関数はふつうそのグラフが絵に描けます. しかし一般的な関数, 特にプログラミングの意味での関数は必ずしも絵に描けませんし, 絵に描ける場合でも描いたからといって何かわかりやすくなるわけでもありません.
絵に描けない場合¶
純粋なプログラミング上の事情で言うと例えば占いの結果です. よく占いのアプリなどがあり, 例えば誕生日を入れるとその日の運勢を教えてくれます. これをこう見立てましょう.
- 入力: 誕生日と日付
- 出力: 運勢を説明する文章
こう思えばまさに占いは関数です. ここで入力は誕生日と日付なので数値とは思えますが, 運勢やそれを説明した文章はふつう数値とは思わないでしょう. 数学でいうグラフにはなりません.
絵に描いてもわかりやすくなるとは限らない場合¶
まずは占いの例をもう少し突っ込みます. 実はコンピューターの内部では, 文章も適当な意味で数値として表現します. こう思えば中学以来の数と数の対応にはできます. しかしわざわざそれを持ち出す人もいないでしょう. そんなことをしてもむしろ分かりにくくなるだけです.
もう一つ中学で出てくる「関数」から例を出します. 例えば順列・組み合わせの ${}_n P_r$ と ${}_n C_r$を考えましょう. 例えば組み合わせは $n$ 個のモノの中から $r$ 個取り出したときの組み合わせの場合の数を指します. つまり $n$ と $r$ を指定したときに一つ数が対応するわけで, $c(n,r)$ とも書けます. 実際プログラミングでは comm(n, r) のような関数が用意されていることもよくあります.
変数が二つなので, 組み合わせの関数は三次元グラフとして絵に描けます. しかし描いたところで別にわかりやすくなるわけではありません. 手で三次元グラフを描くのは大変ですし, プログラムではそれなりに簡単に描けはしますが, 実際問題何かわかるわけではありません. 高校で出てくるパスカルの三角形のような描き方をした方がまだわかります.
プログラミングだけを考えても, 中学数学へのプログラミングの応用を考えても, 関数 (のグラフ) はいつでも絵に描けるわけではなく, 描いたからといってわかりやすくなるわけでもないのです.