• Erlang 中 Tuple 使用 以及 List 模块意外


    tuple 常用函数

    Eshell V6.0 (abort with ^G)
    1> TestTuple = {"Kuangfeng", "yidao", 555, {shank, yan}}.
    {"Kuangfeng","yidao",555,{shank,yan}}
    2> element(4, TestTuple).
    {shank,yan}
    3> tupel_size(TestTuple).
    ** exception error: undefined shell command tupel_size/1
    4> tuple_size(TestTuple).
    4
    5> setelement(2,TestTuple, "Zhan").
    {"Kuangfeng","Zhan",555,{shank,yan}}
    6> tuple_to_list(TestTuple).
    ["Kuangfeng","yidao",555,{shank,yan}]
    9> append_element(TestTuple, "yidao").
    ** exception error: undefined shell command append_element/2
    10> erlang:append_element(TestTuple, "yidao").
    {"Kuangfeng","yidao",555,{shank,yan},"yidao"}
    11> {1,2} =={2,3}.
    false
    12> {2,3} =={2,3}.
    true
    2> erlang:make_tuple(33,a).
    {a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,...}
    3> erlang:make_tuple(9,[],{2,q},{5,a}).
    ** exception error: undefined function erlang:make_tuple/4
    4> erlang:make_tuple(9,[],[{2,q},{5,a}]).
    {[],q,[],[],a,[],[],[],[]}
    5> erlang:make_tuple(4,[]).
    {[],[],[],[]}
    6>

    list 常用函数

    疑问 一

    我对lists:dropwhile/2 始终是不理解,
    文档上说:
    dropwhile(Pred, List1) -> List2
    Types:
    Pred = fun((Elem :: T) -> boolean())
    List1 = List2 = [T]
    T = term()
    Drops elements Elem from List1 while Pred(Elem) returns true and returns the remaining list.
    将List1列表中的元素作为参数执行Pred函数,如果返回true,将其丢弃,最后返回剩余元素组成的列表
    这是别人的测试,对,结果还符合
    例子
    lists:dropwhile(fun(E) -> is_atom(E) end,[a,1,2,a,b]).
    结果
    [1,2,a,b]

    但是我的测试结果就不一样了,这个函数用的少,但是以后也是不敢用啊:
    13> lists:dropwhile(fun(E) -> is_atom(E) end, [1 ,a ,a ,b, s]).
    [1,a,a,b,s]
    14> lists:dropwhile(fun(E) -> is_atom(E) end,[a,1,2,a,b]).
    [1,2,a,b]
    15> lists:dropwhile(fun(E) -> is_atom(E) end,[1,a,2,a,b]).
    [1,a,2,a,b]
    16> lists:dropwhile(fun(E) -> is_atom(E) end,[1,a,2,a,b]).
    [1,a,2,a,b]
    17>
    17> lists:dropwhile(fun(E) -> is_integer(E) end,[1,a,2,a,b]).
    [a,2,a,b]
    18> lists:dropwhile(fun(E) -> is_integer(E) end,[a,2,a,b]).
    [a,2,a,b]
    19>
    针对这个结果我只能这么理解,就是用list的第一个成员作为参数执行函数,
    结果为true,返回所有列表,如果结果为false, 返回除了列表尾巴

    疑问二 lists:usort 当有负数的时候排序不正常

    usort(Fun, List1) -> List2
    按照Fun函数进行排序,如果Fun返回true,那么只返回List1的第一个元素
    如果Fun返回false,那么List1从大到小排序
    lists:usort(fun(A,B) -> true end, [1,2,2,3,4]).
    [1]
    lists:usort(fun(A,B) -> false end, [1,2,2,3,4]).
    [4,3,2,2,1]
    19> lists:usort(fun(A,B) ->true end, [1,2,3,4,0]).
    [1]
    20> lists:usort(fun(A,B) ->false end, [1,2,3,4,0]).
    [0,4,3,2,1]
    21> lists:usort(fun(A,B) ->false end, [1,1,2,3]).
    [3,2,1,1]
    22> lists:usort(fun(A,B) ->false end, [1,1,2,3,-1,-2]).
    [-2,-1,3,2,1,1]
    23>

    疑问三

    umerge(Fun, List1, List2) -> List3
    这个函数和merge不同的是 当Fun返回true时,返回的List3中不能出现相同的元素
    疑问:但是当Fun返回false时,List3中可以有相同的元素。
    lists:umerge(fun(A,B)-> true end,[1,2],[2,3]).
    [1,2,3]
    lists:umerge(fun(A,B)-> false end,[1,2],[2,3]).
    [2,3,1,2]

    lists 函数中需要注意的区别

  • 相关阅读:
    [Swift]GZip字符串压缩和解压缩(Java/C#通用)
    [XCode]UI测试/单元测试
    转 oracle apex 使用
    转 pygame学习笔记(1)——安装及矩形、圆型画图
    转 11g RAC R2 体系结构---Grid
    转如何升级oracle版本?(11.2.0.1至11.2.0.4)
    ORA-14074: partition bound must collate higher than that of the last partition
    12c pdb expdp use DATA_PUMP_DIR meet ORA-39145
    转【Python】Python-skier游戏[摘自.与孩子一起学编程]
    Dock
  • 原文地址:https://www.cnblogs.com/ShankYan/p/4141855.html
Copyright © 2020-2023  润新知