• Erlang顺序型编程


    1、模块

    模块是Erlang中代码的基本单元,我们编写的所有函数都存于模块之中。模块文件存放在以.erl为扩展名的文件中。模块名字与文件名需一致,运行前先得把文件编译成.beam文件。简单模块文件如下:

    geometry.erl

    -module(geometry).

    -export([area/1]).

    area({rectangle,Width,Ht}) ->Width * Ht;

    area({circle,R})                 -> 3.14159 * R * R.

     2、Erlang console切换目录

    cd("c:/work")进行切换目录

    3、fun

    fun就是匿名函数。

    Z = fun(X) ->2*X end.

    Z(2).

    4、以fun为参数的函数

    list是标准库中的一个模块,从中导出很函数都是以fun作为参数的。

    lists:map(F,L) ---将函数应用到列表L的每一个元素上,并返回一个新列表。

    lists:filter(P,L)----返回一个新列表,新列表由列表L中每一个能满足P(E)为true的元素组成。

    5、返回fun的函数

    Fruit = [apple,pear,orange].

    MakeTest = fun(L)->(fun(X) -> lists:member(X,L) end) end.

    IsFruit = MakeTest(Fruit).

    IsFruit(pear).

    其中:

    lists:member(X,L)--如果X是列表L的成员,则函数lists:member(X,L)返回true.

    6、定义自己的抽象流程控制

    Erlang普通版 FOR 循环

    fact(N) when N <=0 -> 1;

    fact(N) when N > 0 -> N * fact(N-1).

    Erlang尾部递归版FOR循环

    fact0(N, R) when N <=0 -> R;

    fact0(N, R) when N > 0 -> fact0(N-1, N*R).

    fact(N) -> facto(N,1).

    尾递归版本避免了栈内存消耗, 普通版为N*占用很多内存

     7、列表解析

    记号[F(X) || X <- l]代表“由F(X)组成的列表,其中X是取值于列表L”。

    [2*X || X <- L). 意味着“列表L中每一个元素X乘以2后的列表”。

    8、Case/if表达式

    case Expression of

      Pattern1 [when Guard1] -> Expr_seq1;

      Pattern2 [when Guard2] -> Expr_seq2;

      ...

    end

    求值后,依次对Pattern进行匹配(带Guard).如果没有任何匹配则报错。

    if

      Guard1 -> Expr_seq1;

      Guard2 -> Expr_seq2;

      ...

    end

  • 相关阅读:
    思考的容器:结构
    思维的结构-结构是思维的组织形式-系统思维
    分层 抽象 复杂 认知
    NoSQL 简介
    什么是数据库ACID?
    sqlite3 多线程和锁 ,优化插入速度及性能优化
    Architecture of SQLite
    关系模型我的理解
    科学理论--抽象
    认识的三个层次
  • 原文地址:https://www.cnblogs.com/freebird92/p/2290195.html
Copyright © 2020-2023  润新知