erlang 第5回 fun, 高階関数
少しテンパっていたので、お勉強も滞っていました。
今回から、第何回なのかを書いてみました。
というわけで、第5回です。
fun
- 無名関数
さっそく簡単に書いてみる
1> TAX = fun(X) -> 1.05 * X end. #Fun2> TAX(1000). 1050.0 3> TAX(10, 30). ** exception error: interpreted function with arity 1 called with two arguments
- 今の消費税を計算する関数
- funはendで終わる
- 引数の数を間違えるとエラーになる
- funを返す関数や引数に取る関数の事を高階関数と呼ぶ
ここが肝らしい
funを引数に持つ
4> List = [100, 98, 298]. [100,98,298] 5> lists:map(TAX, List). [105.0,102.9,312.90000000000003]
- よく使うらしい標準ライブラリのlists:map
- 他にはlists:filter等をよく使うらしい
- lists:filter(fun, list)とした時
- listの要素でfunを処理し、trueになるもののリストを返す
- lists:filter(fun, list)とした時
しかし、5行目の子。そうだよね。普段、数値演算系のプログラム組んでないから忘れかけてた(汗
精度(でしたよね?)には注意しましょう。
1.05を2進数で表現するには、ビットが無限に必要で、仕方なくある程度で丸めて、それに掛け算をした結果、桁があふれて・・・的なのだったハズです。(間違っている場合は、ご指摘ヨロシクです。話がそれるので、詳しく知りたい場合はggr)
1.5にしておけば・・・いやいやそんな消費税嫌。
funを返す関数
- デバッグが難しくなりやすいため、一般的には使われるケースが低めらしい
1> Gkbr = fun(Tax) -> (fun(X) -> Tax * X end) end. #Fun2> Now = Gkbr(1.05). #Fun 3> Future = Gkbr(1.5). #Fun 4> Now(100). 105.0 5> Future(100). 150.0
- 消費税を気軽に変更する処理
泣けるなぁ・・・。
spawnとか使いたいなぁ・・・。
冷静に振り返ると桁落ちだらけだな。