`

[笔记]erlang中的列表

 
阅读更多

开始慢慢erlang的学习了,文中所说也许有误,欢迎指正。

 

 

string就是list

在erlang中 string是用list表示的 先开始让我一头雾水。

在erlang shell中:

3> [97,98,99].
"abc"
4>

 得到了这样的结果 编译器试图把转换为string的list都进行了转换

同样的事情在erlang模块的函数中也可以看见

例如:

4> atom_to_list(abc).
"abc"
5> integer_to_list(123).
"123"

 同理直接对string进行模式匹配也是可以的:

6> [97,B,C]="abc".
"abc"
7> B.
98
8> C.
99
9>

那遇到以上情况 要怎么正常显示出list呢 加个0就可以 原因也很简单 0不能转化为任何的字符(有误请指出)被当做非法的 编辑器也就不会转了(其他的只要不会被当成字符的也行):

11> [0|"abc"].
[0,97,98,99]
12> [-1|"abc"].
[-1,97,98,99]
13>

 以上所说对中文之类的也同样适用:

14> [0|"Iteye博客"].
[0,73,116,101,121,101,178,169,191,205]
15> [178,169,191,205].
"博客"

 此外string也完全支持list的++操作

17> "abc"++"d".
"abcd"
18> "abc"++[0].
[97,98,99,0]

 

 

严格list和非严格list

严格的list都是以空列表(nil)[]作为结尾的:

19> [Head|Tail]=[1].
[1]
20> Head.
1
21> Tail.
[]

 当然空表不是以空表结尾的(没有无限递归在里面):

23> [Head|Tail]=[].
** exception error: no match of right hand side value []

 

而不严格的list就是结尾不是以[]结尾的

要构造一个这样的list也是很简单的:

24> [1]++0.
[1|0]
25> [1,2,3|0].
[1,2,3|0]

 然后匹配一下:

28> [Head|Tail]=[1|0].
[1|0]
29> Head.
1
30> Tail.
0

 可以看到已经没有空列表的踪影了

 

 不过这样的非严格列表在实际使用的时候会比较麻烦,一些对列表操作的递归的终止就是空列表

 在一些常用操作中也无法正确处理非严格列表:

 

41> List=[1,2,3,4|0].
[1,2,3,4|0]
42> [X||X<-List].
** exception error: bad generator 0

 

分享到:
评论

相关推荐

    erlang 笔记

    - **列表**: Erlang中的列表是一种非常重要的数据结构。例如:`[1, 2, 3]` 是一个由三个元素组成的列表。 - **模式匹配**: 可以通过模式匹配来访问列表中的元素。例如:`[Head|Tail] = [1, 2, 3, 4, 5, 6].` 这里`...

    erlang 学习笔记1

    2. **过程(Process)**:Erlang中的轻量级进程是并发执行的基本单元,它们通过消息传递进行通信。这种模型使得Erlang在处理并发和分布式问题时表现出色。 3. **模式匹配**:Erlang的函数定义可以包含模式,允许在...

    读书笔记:ErlangOTP设计原则中文文档.zip

    读书笔记:ErlangOTP设计原则中文文档

    erlang学习笔记

    函数调用在Erlang中通过`apply(Module, Function, Arguments)`实现,这使得调用其他模块中的函数变得简单。对于未知函数,可以使用`Module:Function(Arguments)`的语法。内置函数如`now/0`返回自1970年1月1日以来的...

    rlists:Erlang的扩展列表功能

    编译rebar3 compile测试rebar3 eunit笔记Erlang中没有无限列表。 因此,在Haskell中使用无限列表进行操作的函数将需要附加的输入自变量来说明终止条件。 例如, rlists : iterate ( fun ( X ) -&gt; X * 2 end , 1 , 99...

    Erlang程序设计(第2版)读书笔记:Erlang安装和基础语法

    列表在Erlang中是一个链表,使用单个竖线“|”来分隔列表中的头元素和尾元素。字符串在Erlang中以列表的形式表示,每个字符都由对应的整数值表示,这和C语言的字符串表示方法类似。 Erlang的并发模型是基于轻量级...

    java版商城源码-hello-erlang:Erlang的笔记和例子

    的笔记和主要引用。 检查部分以查看我从哪里获取报价。 请注意,此 repo 始终在进行中。 (我还没找到时间完成这本书。) 话题 陷阱 erlang 没有null值这样的东西 每个函数都需要返回一些东西 erlang 不允许在函数中...

    Scala、Groovy++、Stackless Python、Erlang 学习笔记及分享

    Scala是一种多范式编程语言,它融合了面向对象和函数式编程的概念,旨在提供一种高效...而Erlang则是在高并发、容错性要求极高的系统中不可或缺的选择。了解和掌握这些语言,无疑将增强你在IT领域的专业素养和竞争力。

    RabbitMQ笔记.pdf

    它使用Erlang语言编写,并基于高级消息队列协议(AMQP)。 RabbitMQ的优势在于其开源性质,性能优秀,支持跨平台和跨语言数据生成与消费。它提供了可靠性消息投递模式、返回模式,并且与Spring AMQP完美整合。...

    Redis全套学习笔记 (带章节目录) 完整版pdf

    它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便。 本文是一篇关于Redis全套学习笔记的文章,主要介绍了Redis的基础知识、数据结构、持久化、集群、高可用、...

    rabbitmq学习笔记.zip

    在这个“rabbitmq学习笔记.zip”压缩包中,我们可以期待找到一系列关于RabbitMQ的核心概念、安装教程、使用方法以及常见问题的详细说明。 首先,RabbitMQ的基本概念包括生产者(Producer)、消费者(Consumer)、...

    programming_erlang:章节练习和笔记

    第五章问题据说以下方法存在于 Erlang 的 R17 中但不存在: 地图:to_json(Map) -&gt; Bin 地图:from_json(Bin) -&gt; 地图地图:safe_from_json(Bin) -&gt; 地图似乎没有任何本地方式将 json 转换为 erlang 映射;...

    ierlang, 用于IPython的Erlang语言内核.zip

    ierlang, 用于IPython的Erlang语言内核 交互式Erlang笔记本IErlang是用于 IPython的Erlang语言内核。 此外,它允许用户使用IPython的笔记本,除了IPython执行代码,IErlang可以执行erlang代码并编译并执行erlang模块...

    erlang-kafka:Erlang 的 Kafka 消费者协议

    笔记 主持人 要连接的 Kafka 代理的主机名 本地主机 主机名或 IP 地址作为元组 港口 Kafka 代理使用的端口号 9092 客户编号 发送给 Kafka 代理的客户端 ID &lt;&lt;"ekc"&gt;&gt; 连接: { ok , C } = ekc : start ([{...

    rabbitmq centos7 安装笔记 亲测成功安装.docx

    在CentOS7系统中安装RabbitMQ,首先要解决的关键依赖是Erlang,因为RabbitMQ是基于Erlang语言开发的。以下是一份详细且亲测成功的安装步骤: 1. **下载Erlang源码包**: 首先,你需要从Erlang的官方网站下载合适的...

    rabbitmq学习笔记和软件和插件

    **RabbitMQ学习笔记与软件插件详解** RabbitMQ是一种广泛应用的消息中间件,它基于AMQP(Advanced Message Queuing Protocol)协议,提供可靠的消息传递服务。在分布式系统中,RabbitMQ扮演着数据交换中心的角色,...

    prop:一个 Erlang 代码脚手架和生成器系统

    笔记 prop 目前是 alpha,所以某些东西可能会损坏或某些功能可能会丢失。 用法: Prop = prop:generator(release, "my_erlang_app"), prop:generate(Prop). 或者通过命令行: prop new release my_erlang_app ...

    RabbittMQ软件,资料及笔记

    RabbitMQ是一种基于Erlang编程语言开发的消息队列系统,它在IT行业中广泛应用于实现异步处理、微服务通信以及解耦应用程序组件。这个“RabbittMQ软件,资料及笔记”压缩包可能包含了一系列关于RabbitMQ的学习资源,...

    RabbitMQ入门到精通笔记

    RabbitMQ是一个开源的遵循 AMQP协议实现的基于 Erlang语言编写,支持多种客户端(语言),用于在分布式系统中存储消息,转发消息,具有高可用,高可扩性,易用性等特征\ RabbitMQ是采用 Erlang语言开发的,所以系统...

    RabbitMq学习笔记1

    在本篇学习笔记中,我们将首先了解RabbitMQ的安装过程。 1. **Erlang的安装**: Erlang是RabbitMQ的基础,因为RabbitMQ是用Erlang编写的。安装Erlang可以通过以下命令完成: ```bash sudo apt-get install ...

Global site tag (gtag.js) - Google Analytics