zoukankan      html  css  js  c++  java
  • Erlang 入门

    1、变量

    所有变量必须以大写字母开头。

    如:X

      Y

    2、模式匹配

    在Erlang中,=表示一个模式匹配操作, Lhs=Rhs实际是对右端求后,将结果与左端求值进行匹配。 其中如果左端为未绑定变量,则完全匹配,并赋值到左端。

    3、浮点数

    "/"永远返回浮点数, N div M 和 N rem M是用于整数除和取余数。

    如:0.32

    4、原子

    在Erlang中,原子用来表示不同非数字常量值;

    原子是以一串以小写字母开头,后跟数字字母或下划线或邮件符号的字符串;使用单引号引起来的字符串也是原子。

    如:red、cat、joe@somhost、a_lang_name、'an atom'

    5、元组(tuple)

    将若干个以逗号分割的值用一对花括号括起来,就形成了一个元组。

    如:{1,a,3}

      {3,"adsf",2}

      {person,{name,joe}}

    创建元组:

       F = {firstName, joe}

           P = {person, F}

    取元组中字段值:

           Point = {point, 10, 45}

           取值 10,45可以如下操作

           {point, X,Y} = Point.或者{_,X,Y}

    6、列表

     将若干个以逗号分割的值用一对方括号括起来,就形成了一个列表。

    如:[{apple,10},{pears,6}]

    定义列表:

    如果T是一个列表,那么[H|T]也是一列表。

    竖线符号(|)可以将列表的头和尾分隔开来,面[]表示空列表。

    也可以用[[E1,E2,...|T]这种形式向T的起始加入多个元素。并不能从后加入呢。

    常用成员函数:

    foldl:   %%    foldl(Fun, Acc0, List) -> Acc1
    > lists:foldl(fun(X, Sum) -> X + Sum end, 0, [1,2,3,4,5]).

    Fun的参数为(Elem, AccIn), 其中AccIn 以Acc0初始化,返回值累计值,作为下一次AccIn的输入值。 从左向右。

    filter: %%    filter(Pred, List1) -> List2
    > lists:filter(fun(X) -> X > 5 end, [1,2,3,4,5,6,7]).
    对成员进行过滤, 成员通过函数返回true的,构成一个列表

    append: %% append(List1, List2) -> List3

    > lists:append("abc", "def").
    追加列表,都到一个新列表 。l
    ists:append(A, B) 等同 A ++ B.

     7、字符串

    严格意义上,Erlang并没有字符串,字符串实际是一个整数列表。用(")将一串字符括起来就是一个字符串。

    如:Name = "Hello".

    [83,117,114,112,114,105,115,101].就是"Surprise"

    8、记录

    记录就是一个提供了基于名字访问成员的元组。

    记录的结构如下:

    record在原代码文件中定义
    -record(person, {name="",phone=[], address}).

    定义记录:

    在console中的定义

    rd(person,{name="",phone=[],address}).

    创建记录:

    P = #person{phone=[0,3,2,4,5], name="robert"}.

    访问字段:

    P#person.name.

     更新记录:

    P2 = P#person{name="joe"}.

    匹配:

    #person{name=Name} = P2, Name.

    Shell 命令:rr/1  读入文件中的记录

    (om@Vaio)5> rr(usr).
    [usr]

    9、进程词典

    每个进程都有一个名叫“进程字典”的本地存储。 如下的BIF用来操作它:(对原值操作时,都会返回旧值)
    get() 返回整个进程词典

    get(Key) 返回与Key关联的内容(Key 是任意erlang结构), 或者,未找到返回undefined.
    put(Key, Value) 把值和键进行关联 .返回与该值关联的旧值

    erase() 清空整个词典

    erase(Key) 清空指定键

    get_keys(Value) 取指定键

    10、守护判断

            number(X)       - X is a number
            integer(X)      - X is an integer
            float(X)        - X is a float
            atom(X)         - X is an atom
            tuple(X)        - X is a tuple
            list(X)         - X is a list
           
            length(X) == 3  - X is a list of length 3
            size(X) == 2    - X is a tuple of size 2.
           
            X > Y + Z       - X is > Y + Z
            X == Y          - X is equal to Y
            X =:= Y         - X is exactly equal to Y
                              (i.e. 1 == 1.0 succeeds but
                               1 =:= 1.0 fails)

  • 相关阅读:
    RGB888转RGB666
    bmp文件格式详细解析
    Qt 5简介
    IntelliJ IDEA 快捷键
    猫猫学iOS之小知识之_xcode插件的删除方法_自己主动提示图片插件KSImageNamed有时不灵_分类或宏之类不能自己主动提示,
    sql server 2008出现远程过程调用失败
    Oracle-31-对视图DML操作
    uva 11127(暴力)
    各种排序算法的分析与实现
    我的Android进阶之旅------>怎样解决Android 5.0中出现的警告: Service Intent must be explicit:
  • 原文地址:https://www.cnblogs.com/freebird92/p/2290046.html
Copyright © 2011-2022 走看看