高階関数とは
高階関数とは、関数を操作するための関数です。
- 関数を引数として受け取る関数
- 関数を返り値として返す関数
具体例
1. map
引数で関数とコレクションを受け取り、各要素に対して関数を適用し、新しいシーケンスを生成する関数
(map inc [1 2 3])
;; => (2 3 4)
(map + [1 2 3] [2 3 4])
;; => (3 5 7)
2. filter
引数で関数とコレクションを受け取り、条件を満たす要素だけを抽出する関数
(filter even? [1 2 3 4 5 6 7 8 9 10])
;; => (2 4 6 8 10)
3. 関数を返す関数
受け取った値(x)よりも大きいかどうかを判定する関数を返すgreater-than
という関数を作ってみます。
(defn greater-than [n]
(fn [x] (> x n)))
;; => #'todo.core/greater-than
(def greater-than-5 (greater-than 5))
;; => #'todo.core/greater-than-5
(greater-than-5 6)
;; => true
(greater-than-5 4)
;; => false
このような高階関数を使うことで、コードの再利用性、コードの簡潔性、メンテナンス性、柔軟な抽象化をすることができそうです