`
xgene
  • 浏览: 27324 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

《Erlang程序设计》学习笔记-第3章 顺序型编程

阅读更多
摘自:http://hi.baidu.com/zai215837829/blog/item/2f4fc2c770c882019d163d80.html

1. 自定义的for循环结构:
    for(Max, Max, F) -> [F(Max)];
    for(I, Max, F) -> [F(I) | for(I+1, Max)].


2. -import(lists, [map/2, sum/1]. 导入lists模块中的map/2和sum/1函数,这样再应用时可以直接写map(...)和sum(...)了。

3. 列表解析: [F(X) || X <- L]。例子:
    [ 2*X || X <- L]   %% 将列表L的元素*2,生成新的列表。
    [{Name, 2*Number} || {Name, Number} <- Buy]
    [shop:cost(A)*B || {A, B} <- Buy]
    map(F, L) -> [F(X) || X <- L].

4. 列表解析的常见形式:[X || Qualifier1, Qualifier2, ...]
    X是一个任意的表达式,每一个限定词可以是一个生成器,也可以是一个过滤器。
    生成器: Pattern <- ListExpr, ListExpr必须是一个对列表项求值的表达式。
    过滤器: 可以是一个返回true或false的函数,也可以是一个布尔表达式。
    其实,生成器的Pattern也可以起到过滤器的作用,如:
        [X || {a, X} <- [{a, 1}, {b, 2}, {c, 3}, {a, 4}, hello, "wow"]].           %% 返回值:[1,4]
        相当于[X || {A, X} <- [{a, 1}, {b, 2}, {c, 3}, {a, 4}, hello, "wow"], A=:=a].   
    map18. A++B,是将列表B附加到列表A上生成一个新的列表,但效率不高。
    A--B,是从列表A中删除与B中元素相同的所有元素,如果元素X在B中出现K次,则会从A中依次删除K个元素X。

5. 断言(guard)是一种用于强化模式匹配功能的结构。


6. 在函数定义的头部使用断言时,必须以关键字when开头。如:
    max(X, Y) when X > Y -> X;
    man(X, Y) -> Y.


7. 可以在任何允许使用表达式的地方使用断言,当断言用于表达式时,它要么返回原子true(认为是求值成功),要么返回原子false(求值失败)。


8. 断言序列:
    一组用逗号分隔的断言表达式表示的是and关系,即所以的断言为true,整个断言序列才为true。
    一组用分号分隔的断言表达式表示的是or关系

9. 断言谓词:
    is_atom(X)
    is_binary(X)
    is_constant(X)
    is_float(X)
    is_function(X)
    is_function(X, N)
    is_integer(X)
    is_list(X)
    is_number(X)
    is_pid(X)
    is_port(X)
    is_reference(X)
    is_tuple(X)
    is_record(X, Tag)
    is_record(X, Tag, N)

10. 断言BIF
    abs(X)                    X的绝对值
    element(N, X)        元组X的第N个元素
    float(X)                    将数字N转换为浮点数
    hd(X)                        列表X的头部
    length(X)                   列表X的长度
    node()                        当前节点
    node(X)                    进程X的节点
    round(X)                将数字X转换为整数(四舍五入)
    self()                    当前进程的标识符
    size(X)                    X的大小,X为元组或二进制数据
    trunc(X)                将数字X转换为整数(截取)
    tl(X)                        列表X的尾部

11. 尽量在一个列表的头部进行操作,尽量避免用到List++[H]这样的代码,除非List很短。通常要以自然顺序创建列表。规则如下:
    (1)总是在列表头部添加元素。
    (2)从一个输入列表的头部提取元素,然后把它们加在一个输出列表的头部。输出列表中的结果与输入列表的顺序相反。
    (3)如果顺序至关重要,那么调用经过高度优化的函数list:reverse/1。 (这个函数是在erlang虚拟机中实现的,经过了高度的优化)。
    (4)避免违反这些原则。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics