很久没来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的版本管理中,`kerl`是一个方便的工具,用于构建、安装和管理Erlang/OTP(Open Telecom Platform)的源代码版本。标签"erlang"表明讨论的核心是Erlang语言本身。文件名"otp_src_25.1"代表了OTP的源代码包,...
mtproto_proxy:高性能https://t.mesocksy_bot的Erlang MTProto代理
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 ...
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-...
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配置提供程序/应用程序 纸屑五彩纸屑是你的Erlang应用程序的配置提供程序。基本上是 application:get_env/2 在类固醇上。特性管理控制台可以通过telnet维护部门访问将为你 love在运行时重新加载( ...
erlang-script.rpm 安装mq前的依赖 来源:https://packagecloud.io/rabbitmq/erlang/install#bash-rpm
erlang文献及资料汇总 入门资料: erlang中文手册(R11B 文档译文,最适合入门) erlang位运算与二进制解析 erlang二进制高效编程 erlang异常处理详解 开发经验: 面对软件错误构建可靠的分布式系统 编写分布式的 ...
### Erlang标准库(STDLIB)与I/O协议详解 #### 概述 Erlang是一种功能强大且灵活的编程语言,广泛应用于构建高并发、容错性良好的系统。其标准库(STDLIB)提供了丰富的函数集合以及一系列用于简化开发过程的工具。...
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` 和 `...
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`...
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
1. **Erlang安装**: Erlang是RabbitMQ的基础,因为RabbitMQ是用Erlang编写的。首先,我们需要确保系统更新到最新状态: ``` sudo yum update -y ``` 然后,添加EPEL(Extra Packages for Enterprise Linux)...
VMware安装包和密匙 也可以从百度云下载:https://pan.baidu.com/s/1wibDu_rrN7_ByU9_-sQSLQ 提取码:mgod
由于官网下载速度慢,提供一个最新版消息队列服务器下载 安装方式1、先装erlang.exe(路径因为不要有空格)装好之后配置环境变量path 指向erlang的bin 2、安装rabbitmq然后打开cmd安装插件RabbitMQ-Plugins(网页管理...
OpenEmbedded / Yocto Project层,用于Erlang和Elixir支持 此层提供对与和/或构建系统一起使用的和支持: 文献资料 请参阅。 依存关系 该层取决于: URI:git://git.openembedded.org/bitbake分支:主 URI:git:...
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 ...
1. **轻量级进程**:Erlang中的进程比操作系统进程更轻,它们是并发执行的基本单位,可以快速创建和销毁,这使得Erlang非常适合构建高并发系统。 2. **软实时**:Erlang提供了一种近似实时的环境,保证了低延迟和高...
在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用于rabitmq基础环境安装