Erlang列表解析
来源:互联网 发布:淘宝现在什么好卖2017 编辑:程序博客网 时间:2024/04/29 07:08
列表解析是一种无须使用fun,map或filter来创建列表的表达式,他能使代码更加简洁,更加容易理解。
如:
1>L= [1,2,3,4].
2>lists:map(fun(X)->2*X end,L).
这一功能可用列表解析来实现:
[2*X || X<-L].
记号[F(X) || X <- L] 表示由F(X)组成的列表,其中X取值于L。
列表解析最常见的形式:[X || 条件1,条件2,...]
如:
1>[X || {a,X} <- [{a,1},{b,2},{c,3},{a,4},hello,"www"]].
[1,4]
列表解析范例:
1. total函数使用列表解析改进:
total(L) ->
lists:sum([shop:cost(A)*B || {A,B} <- L]).
附:之前的total函数定义
(1). total([{What,N}|T]) ->
shop:cost(What)*N + total(T);
total([]) ->
0.
(2). total(L) ->
lists:sum(lists:map(fun({What,N})->shop:cost(What)*N end,L)).
2. 用列表解析编写一个更简洁的map定义:
map(F,L) -> [F(X) || X <- L].
附:之前的map定义
map(_,[]) -> [];
map(F,[H|T]) -> [F(H)|map(F,T)].
3.快速排序:
qsort([]) -> [];
qsort([Pivot|T]) ->
qsort([X || X <- T,X < Pivot])
++ [Pivot] ++
qsort([X || X <- T,X > Pivot]).
4. 字符串全排列:
perm([]) -> [[]]; %%注意这里是两个中括号,因为返回列表的元素也是列表。
perm(L) -> [[H|T] || H <-L,T <-perm(L--[H])].
执行:
17> lib_misc:perm("123").
["123","132","213","231","312","321"]
5.毕达哥拉斯三元组
pythag(N) ->
[{A,B,C} ||
A <- lists:seq(1,N),
B <- lists:seq(1,N),
C <- lists:seq(1,N),
A+B+C =< N,
A*A + B*B =:= C*C
].
- Erlang列表解析
- Erlang笔记(09) - 列表解析
- erlang 列表解析,变位词解析过程
- erlang循环结构:尾递归,列表解析
- Erlang学习笔记(4) -- 列表解析
- Erlang-列表
- Erlang高级数据类型,函数式、列表解析、二进制、引用
- erlang列表遍历插入
- erlang列表速构
- erlang 的 DNS 解析
- Erlang的Xml解析
- erlang的terminate解析
- erlang dict源码解析
- erlang解析socket包头
- Erlang模块使用频度列表
- erlang 列表处理函数 (lists)
- Erlang学习之列表推导
- erlang 列表推导完全理解
- SGU:107 987654321 problem
- RelativeLayout相对布局
- c#委托和事件区别
- IOS cocos2d学习笔记-<五>CCAction精灵运动
- 线程程序里不准使用fork ?
- Erlang列表解析
- c++类多重继承初始化顺序
- MySQL数据口于其它数据库类型对应表
- C语言单链表实现19个功能完全详解
- Animation RotateAnimation详解
- java.io.IOException: No authentication challenges found
- Struts bean:define标签用法
- windows编程之helloworld
- 反素数