erlang list循环输出,匿名函数

时间:2022-06-01 17:55:03

erlang list循环输出,匿名函数

本文主要介绍erlang的list循环输出,同时附上例子。

list是erlang中的一个数据结构。我们直接上代码看下:
-module(helloworld).
%% API
-export([hello_world/0, increment/1, decrement/1, out/1, common/2]).

hello_world() ->
io:format("hello world~n", []),
List = [1, 2, 3],
out(List),
NewList = increment(List),
out(NewList),
%% 这里可以使用声明函数F 或者使用匿名函数,匿名函数适合在使用一次的场景下。
NewList2 = common(fun(X) -> X + 2 end, NewList),
out(NewList2),
F = fun(X) -> X - 3 end,
NewList3 = common(F, NewList2),
out(NewList3).



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

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

%%写一个通用的写法 处理数组中的数据
common(_, []) -> [];
common(F, [H | T]) -> [F(H) | common(F, T)].

%%输出数组
out(Array) ->
lists:foreach(fun(X) -> io:format("~p ", [X]) end, Array), io:fwrite("~n").

输出结果:
hello world
1   2   3   
2   3   4   
4   5   6   
1   2   3

简单说明一下,匿名函数在这里面的作用。首先对于一个list我们可以给每一个list中的元素进行操作,但是这种操作是定死的,也就是说,想要有一个加1函数,那么需要每次都调用加1;需要一个减1函数,那么需要每次都调用减1。现在使用这种匿名函数的方式,能够实现的是对每一个元素的操作是可变的函数,也就是说操作是一种参数,对每个元素的操作可以作为参数传递到函数中。

这也从侧面反映了函数式的程序语言中函数作为第一成员的地位。同时,也能够很直观的感受到这种处理逻辑更符合我们平常的思考方式。