DAY 12
1

## Higher-order functions

Higher-order functions.

``````-module(hhfuns).
-compile(export_all).

increment([]) -> [];
increment([H | T]) ->
[H + 1 | increment(T)].

decrement([]) -> [];
decrement([H | T]) ->
[H - 1 | decrement(T)].

map(_, []) -> [];
map(F, [H | T]) ->
[F(H) | map(F, T)].

incr(X) -> X + 1.
decr(X) -> X - 1.
``````

``````1> c(hhfuns).
{ok,hhfuns}
2> L = [2,7,5,3].
[2,7,5,3]
3> hhfuns:increment(L).
[3,8,6,4]
4> hhfuns:decrement(L).
[1,6,4,2]
5> hhfuns:map(fun hhfuns:incr/1, L).
[3,8,6,4]
6> hhfuns:map(fun hhfuns:decr/1, L).
[1,6,4,2]
``````

increment()的功能是將傳入的List,使用遞迴的方式,將內容加1.
decrement()則是減1.

map/2透過傳入的函數F與List,使用遞迴方式,從頭部逐一取出List內容,

``````-module(hhfuns).
-compile(export_all).

increment([]) -> [];
increment([H | T]) ->
[H + 1 | increment(T)].

decrement([]) -> [];
decrement([H | T]) ->
[H - 1 | decrement(T)].

map(_, []) -> [];
map(F, [H | T]) ->
[F(H) | map(F, T)].

incr(X) -> X + 1.
decr(X) -> X - 1.

even(X) -> (X rem 2) =:= 0.
``````

``````7> c(hhfuns).
{ok,hhfuns}
8> hhfuns:map(fun hhfuns:even/1, L).
[true,false,false,false]
``````

``````9> [hhfuns:incr(X) || X <- L].
[3,8,6,4]
10> [hhfuns:decr(X) || X <- L].
[1,6,4,2]
11> [hhfuns:even(X) || X <- L].
[true,false,false,false]
``````

erlang裡面有提供lists:map/2 供我們使用,

map,filter;我們還可視需要開發更強大的功能來應用.
List Comprehension名稱已經說明了就是針對List,