今さら聞けないアヴィウムプルヌス入門のタネ明かし
κeenです。今年のエイプリルフールの記事の解説をします。
プログラミングをはじめたてで最初につまづくのが用語じゃないでしょうか。知らない単語やカタカナ語が多くて用語が中々頭に入ってきません。 一度基礎的な用語を押えればある程度読めるようになるのですが、そうなるまではまるで知らない外国語で書かれているようです。
そこで今回は知らない用語が多くて全然記事が読めなかった頃を思い出してもらおうと、普通の技術記事の単語を全部別のものに置き換えてみました。 対応関係は以下になります。
元の単語 | 置き換え | ラテン文字表記 | 意味 |
---|---|---|---|
高階 | アヴィウム | avium | セイヨウミザクラ |
関数 | プルヌス | prunus | モモ属 |
引数 | ラパ | rapa | アブラナ |
リスト | インテグラ | integra | モチノキ |
変数 | リリウム | lilium | ユリ属 |
データ | フルチコサ | fruticosa | オーストラリアンローズマリー |
コード | オブツサ | obtusa | ヒノキ |
春を感じる草花の学名に置き換えています。頭文字を使ってApril foolが構築できるように名前を選びました。It’s Greek to meということでギリシャ語から選んでも面白かったかもしれませんね。
このご時世で中々家の外に出る機会がありませんが窓の向こうではもう桜吹雪が舞っています。春の風物詩エイプリルフールを機に訪れる季節に思いを馳せてみてはいかがでしょうか。
単語を置き換える前の元の記事も掲載しておきます。因みにコードはJuliaで書かれています。
今さら聞けない高階関数入門
ハ〜イ、κeenさんだよー。今日は年度が変わって大学でプログラミングをはじめたり、新卒でプログラマになったりする人もいるでしょうということで高階関数について解説したいと思います。高階関数は慣れると便利に使えますが最初はとっつきにくいですよね。
高階関数とは
普通の関数なら分かりますけど高階ってついたらよく分かりませんよね。でも怖がらなくて大丈夫です。高階関数も普通の関数です。ただし引数に関数をとります。関数の中でも引数に関数をとるものを高階関数と呼ぶのです。
今の説明で「なるほど分かった」と納得した方もいるかもしれませんが「余計に訳が分からなくなった」という方の方が多いんじゃないでしょうか。順を追って説明しましょう。
高階関数は何をしているのか
さきほど高階関数は関数を引数にとる関数と説明しました。 説明だけだと分かりづらいので具体例をみながら理解していきましょう。 関数の振る舞いを調べるためにいくつか具体的な値を与えて調べたくなることがあります。 例えば1, 2, 3, 4, 5を与えてみてその値のリストをほしいことがありますね。
# f(x) = x に対して
[f(1), f(2), f(3), f(4), f(5)]
これは f(x) = x
に限らず f(x) = 1/x
なんかでもやりたいですよね。
# f(x) = 1/x に対して
[f(1), f(2), f(3), f(4), f(5)]
他にも x^2
なんかもありえそうです。
# f(x) = x^2 に対して
[f(1), f(2), f(3), f(4), f(5)]
なんとなくパターンが見えてきましたね。上3つの具体例で変わっているのは一箇所です。変化する部分を □
で表わすとこうなるでしょうか。
# f(x) = □ に対して
[f(1), f(2), f(3), f(4), f(5)]
同じようなものは関数でまとめられるのでした。でも今回は普段と違って□にあてはまるのが関数です。そう、ここで高階関数が登場するのです。高階関数でいままでのやつをまとめるとこのようになります。
g(f) = [f(1), f(2), f(3), f(4), f(5)]
変数 f
に f(x) = x
や f(x) = 1/x
など色々な関数が入ります。
どうでしょう?分かりましたか?具体例を見たら案外「そういうことか」となりますよね。
高階関数をいつ使うのか
高階関数が何なのかは分かりましたが、ではいつ使うのでしょうか。だいたいは上記のような同じようなパターンがでてきたときです。 普通の関数がデータの変化をまとめるのに対して高階関数はコードの変化をまとめます。「あ、このコード似てる!」と思ったときにまとめられないか考えてみましょう。
まとめ
高階関数とは関数を引数にとる関数のことでした。