`
acme_ltt
  • 浏览: 53697 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Erlang lists:concat/1

阅读更多

  很久没来iteye了,也很久没写blog了,主要是找实习的一些事情有点麻烦。

  接下来的很长时间,blog会记录一些Erlang stdlib的一些常用的module。当然,也会尽力去看一下这些module fuctions的具体实现(BIF暂不考虑)。

  这一篇,主要是lists:concat/1

  API的具体介绍,详见Erlang官网,erlang.org/doc/man/lists.html#concat-1

 

  找下这个函数的Erlang源码实现:

 

%% lists:concat/1 的 结果为string() 类型

-spec concat([concat_thing()]) -> string().

concat(List) ->
    flatmap(fun thing_to_list/1, List).

 

-spec flatmap(fun((D) -> [R]), [D]) -> [R].

flatmap(F, [Hd|Tail]) ->

    %% 尾递归,

    %% ++ 操作 

    %% 将list中得元素,使用F函数做处理,这点值注意借鉴。
    F(Hd) ++ flatmap(F, Tail);            

%%特殊处理。当list为空时,判断F是否为函数,是,结果为[]
flatmap(F, []) when is_function(F, 1) -> [].

 

%%将不同类型的元素,都转换为list。

thing_to_list(X) when is_integer(X) -> integer_to_list(X);
thing_to_list(X) when is_float(X)   -> float_to_list(X);
thing_to_list(X) when is_atom(X)    -> atom_to_list(X);
thing_to_list(X) when is_list(X)    -> X. %Assumed to be a string

 

总结下:

1、调用函数时,可以不用fun() -> *** end  这么麻烦的写了,直接fun ***/* 简单明了;

2、使用这个函数时,参数不能是二进制类型;

3、字符串的本质就是数组,直接用;

4、如果参数都是字符串或者列表时,直接用“++”操作符吧,省去了匹配过程。

分享到:
评论

相关推荐

    erlang 25.1 放入/root/.kerl/archives,直接./kerl build 25.1

    在Erlang的版本管理中,`kerl`是一个方便的工具,用于构建、安装和管理Erlang/OTP(Open Telecom Platform)的源代码版本。标签"erlang"表明讨论的核心是Erlang语言本身。文件名"otp_src_25.1"代表了OTP的源代码包,...

    mtproto_proxy:高性能https://t.mesocksy_bot的Erlang MTProto代理

    mtproto_proxy:高性能https://t.mesocksy_bot的Erlang MTProto代理

    RabbitMQ安装erlang环境包.zip

    wget https://github.com/rabbitmq/erlang-rpm/releases/download/v$(curl -s https://www.rabbitmq.com/erlang-releases.html | grep -oP 'Erlang/OTP [^<]*' | head -n 1)/erlang-$(curl -s ...

    CentOS7 安装RabbitMQ集群.docx

    baseurl=https://packagecloud.io/rabbitmq/erlang/el/7/$basearch repo_gpgcheck=1 gpgcheck=0 enabled=1 gpgkey=https://packagecloud.io/rabbitmq/erlang/gpgkey sslverify=1 sslcacert=/etc/pki/tls/certs/ca-...

    esl-erlang-26.0.2x86-64.zip

    error: /tmp/esl-erlang_26.0.2-1~alinux~3_x86_64.rpm : not an rpm package (or packape manifest): arning: /tmp/rabbitmg-erver 3.12.4-1 all.rpm: Header V4 RSA/SHA512 Signature, key ID 6026dfca: NOKEY ...

    confetti, Erlang配置提供程序/应用程序.zip

    confetti, Erlang配置提供程序/应用程序 纸屑五彩纸屑是你的Erlang应用程序的配置提供程序。基本上是 application:get_env/2 在类固醇上。特性管理控制台可以通过telnet维护部门访问将为你 love在运行时重新加载( ...

    erlang-script.rpm.sh

    erlang-script.rpm 安装mq前的依赖 来源:https://packagecloud.io/rabbitmq/erlang/install#bash-rpm

    erlang文献及资料汇总

    erlang文献及资料汇总 入门资料: erlang中文手册(R11B 文档译文,最适合入门) erlang位运算与二进制解析 erlang二进制高效编程 erlang异常处理详解 开发经验: 面对软件错误构建可靠的分布式系统 编写分布式的 ...

    erlang最新api

    ### Erlang标准库(STDLIB)与I/O协议详解 #### 概述 Erlang是一种功能强大且灵活的编程语言,广泛应用于构建高并发、容错性良好的系统。其标准库(STDLIB)提供了丰富的函数集合以及一系列用于简化开发过程的工具。...

    RabbitMQ:安装、配置与使用初探

    wget http://www.rabbitmq.com/releases/erlang/erlang-18.1-1.el6.x86_64.rpm # 安装 Erlang rpm -ivh erlang-18.1-1.el6.x86_64.rpm ``` 如果安装过程中遇到依赖问题,需要先解决这些依赖。例如安装 `gcc` 和 `...

    Erlang list用法

    lists:all(fun(E) -> true end, [1, 2, 3, 4]). ``` 结果为`true`,因为对于所有元素`E`,`fun(E) -> true end`总是返回`true`。 2. `any/2`:与`all/2`相反,`any/2`检查列表中是否存在至少一个元素满足`Pred`...

    Erlang22.2和RabbitMQ3.8.2安装包(Windows64位)

    otp_win64_22.2.exe rabbitmq-server-3.8.2.exe windows64位下 欢迎下载 官网地址: ...Erlang:https://www.erlang.org/downloads RabbitMQ:https://www.rabbitmq.com/install-windows.html

    Centos7安装RabbitMQ的文档和安装包(包含erlang安装包).rar

    1. **Erlang安装**: Erlang是RabbitMQ的基础,因为RabbitMQ是用Erlang编写的。首先,我们需要确保系统更新到最新状态: ``` sudo yum update -y ``` 然后,添加EPEL(Extra Packages for Enterprise Linux)...

    VMware安装包和密匙

    VMware安装包和密匙 也可以从百度云下载:https://pan.baidu.com/s/1wibDu_rrN7_ByU9_-sQSLQ 提取码:mgod

    erlang21.3_rabbitmq3.8.3.zip

    由于官网下载速度慢,提供一个最新版消息队列服务器下载 安装方式1、先装erlang.exe(路径因为不要有空格)装好之后配置环境变量path 指向erlang的bin 2、安装rabbitmq然后打开cmd安装插件RabbitMQ-Plugins(网页管理...

    meta-erlang:支持Erlang和Elixir

    OpenEmbedded / Yocto Project层,用于Erlang和Elixir支持 此层提供对与和/或构建系统一起使用的和支持: 文献资料 请参阅。 依存关系 该层取决于: URI:git://git.openembedded.org/bitbake分支:主 URI:git:...

    erlang19安装包

    Erlang/OTP 19.1 is a service release containing mostly bug fixes, as well as a number of new features and characteristics improvements. Some highlights of the release are: erts: Improved dirty ...

    rabbitmq - erlang

    1. **轻量级进程**:Erlang中的进程比操作系统进程更轻,它们是并发执行的基本单位,可以快速创建和销毁,这使得Erlang非常适合构建高并发系统。 2. **软实时**:Erlang提供了一种近似实时的环境,保证了低延迟和高...

    erlang test 生成 dets

    在Erlang中,你可以使用`file:open/2`和`io:get_line/1`读取这个文件,然后将读取到的数字转换为Erlang术语,再插入到DETs表中。 在实际测试中,可能还需要关注性能、并发操作以及错误处理等方面。例如,使用`etap`...

    esl-erlang-25.0.3-1-centos-7-amd64.rpm erlang-25.0.3-1 rpm

    esl-erlang_25.0.3-1_centos_7_amd64.rpm erlang_25.0.3-1 rpm用于rabitmq基础环境安装

Global site tag (gtag.js) - Google Analytics