erlang的lists笔记】的更多相关文章

一般循环用在遍历列表的时候,erlang有lists模块直接支持遍历,不需要自己写尾递归遍历list lists:foreach 用来遍历列表,不保存结果,最后一次返回ok lists:map 遍历列表,不过,每次函数 Fun 执行的结果将保留,并组成一个列表返回. lists:filter 遍历列表,根据返回值决定是否保留结果,true保留,false不保留,最后形成列表 上面这些,在为list做遍历的时候,非常有用 还有一个lists:nth方法,根据位置获取元素,不过需要注意的是,索引从1…
上接erlang下lists模块sort(排序)方法源码解析(一),到目前为止,list列表已经被分割成N个列表,而且每个列表的元素是有序的(从大到小) 下面我们重点来看看mergel和rmergel模块,因为我们先前主要分析的split_1_*对应的是rmergel,我们先从rmergel查看,如下 ....................................................... split_1(X, Y, [], R, Rs) -> rmergel([[Y, X…
排序算法一直是各种语言最简单也是最复杂的算法,例如十大经典排序算法(动图演示)里面讲的那样 第一次看lists的sort方法的时候,蒙了,几百行的代码,我心想要这么复杂么(因为C语言的冒泡排序我记得不超过30行),于是自己就实现了下 结果更蒙了 bubble_sort(L)-> bubble_sort(L,length(L)). bubble_sort(L,0)-> L; bubble_sort(L,N)-> bubble_sort(do_bubble_sort(L),N-1). do_…
#从源码编译安装Erlang 1. wget http://www.erlang.org/download/otp_src_r16b.tar.gz -p /usr/local/src 2. tar zxvf otp_src_r16b.tar.gz -c /usr/local/src 3. cd otp_src_r16b 4. ./configure --prefix=/usr/local/erlang 5. make 6. make install 7. 将"/usr/local/erlang/…
对一个运行中的Erlang系统来说,进程绝对是重要的组成部分.正因为进程是所有运行实体的基础,因此会想去了解它们的更多信息.幸运的是,VM提供了大量的可用信息,其中有些可以安全使用,有些在生产环境中使用是不安全的(因为会返回非常大的数据集合,拷贝到shell以及打印所需的内存量会造成节点崩溃). 进程的所有信息都可以通过调用process_info(Pid, Key)或者process_info(Pid, [keys])86得到. 下面是一些常用的键值:…
error_logger 爆炸 具有讽刺意味的是,负责错误日志的进程竟然是最为脆弱的之一.在Erlang的缺省安装中,error_logger39负责记录日志(写入磁盘或者发送到网络上),它的速度要比错误产生的速度慢得多.尤其是在记录用户产生的日志消息(不是错误)或者大量进程崩溃时,更是如此.对于前者,是因为error_logger本来就不适用于记录高度连续的消息.它只适用于真正的异常情况,并不期望过多的消息量.对于后者,是因为崩溃进程的完整状态(包括其消息邮箱)都会拷贝出来进行日志记录.这种消…
为过载做计划 到目前为止,我在实际工作中所碰到最常见的错误,基本上都是节点内存耗尽.而且通常都和过长的消息队列有关37.解决这类问题的方法有很多,不过只有在深入.全面的理解系统后,才能做出正确的选择.    基本上,我从事的所有项目都可以简化类比成一个非常大的浴室水槽.用户请求和数据从龙头流入.Erlang系统则是水槽和管道,可以把水流出的地方(数据库,外部API或者服务,等等)看作是下水道系统. 当Erlang节点由于队列溢出而死亡时,找到原因所在是至关重要的.是流入槽中的水太多了吗?是下水道…
1.大家听说Erlang,往往是因为其对高并发的良好支持.其实,Erlang的核心特征是容错,从某种程度上讲,并发只是容错这个约束下的一个副产品.容错是Erlang语言的DNA,也是和其他所有编程语言的本质区别所在. 2.从某种意义上讲,Erlang不仅是一门编程语言,更是一个系统平台.它不仅提供了开发阶段需要的支持,更提供了其他语言所没有的运行阶段的强大支持.其实,在静态检查和测试阶段发现的问题往往都是些“不那么有趣”的问题,那些逃逸出来的bug才是真正难对付的.特别是对于涉及并发和分布式的b…
下一篇:流程控制<二> 阅读链接:官方Python3.7教程 废话:最近开始阅读python3.7文档,希望把容易混淆的知识记下来. 除法总是返回一个浮点数 >>> 8/2 4.0 >>> 4/6 0.6666666666666666 >>> 可以使用 // 除法得到整数 >>> 8/2 4.0 >>> 4/6 0.6666666666666666 >>> 幂运输使用 ** >&g…
如果某个进程需要持续地接收新任务,那么其在执行耗时过长的锁或者阻塞操作时,就会出现问题. 最为常见的例子之一就是:某个进程使用了TCP socket,阻塞在了接收新的连接或者等待消息上面.在执行此类阻塞操作时,消息会不受限制地堆积在消息队列中. 一个更为糟糕的例子是我曾经为lhttpc库的某个分支写的http连接池管理器.在大多数测试用例下,它都工作正常,我们甚至把连接的超时时间设置为10ms,以确保不会耗费太多的时间40.正常工作了几周后,该HTTP连接池导致了一次服务中断,原因是有个远程服务…
    我们的IOS移动应用要实现消息推送,告诉用户有多少条消息未读,类似下图的效果(笑果),特把APNS和Erlang相关解决方案笔记于此备忘.          上面图片中是Apple Notification在UI展现的形式之一,Notification共有三种形式:图标显示更新数字(badge),提示信息(alert),提示音(sound);      iOS Apple Push Notification Services (APNs)官方的开发文档位置在:[Apple Push No…
原文: http://elixir-lang.org/crash-course.html 函数调用 Elixir允许你调用函数的时候省略括号, Erlang不行. Erlang Elixir some_function(). some_function sum(A,B) sum a,b 从模块中调用一个函数, 使用不同的语法, 在Erlang, 你可以写: lists:last([1,2]). 从List模块中调用last函数. 在Elixir中使用.符号代替:符号. List.last([1,…
The hardware we rely on is changing rapidly as ever-faster chips are replaced by ever-increasing numbers of cores. As a result, concurrency and parallelism, niche features today, will soon be a basic requirement for most software. Application develop…
上一篇:Numbers.Strings.Lists 笔记<一>下一篇:数据结构-Python3.7<三> 如果需要修改迭代中的数据,建议先赋值一个副本(e.g:序列,切片复制的副本作为迭代) >>> words=['dbibiubiubi'] >>> for w in words[:]: ... words.append('haha') ... print(words) ... ['dbibiubiubi', 'haha'] 需要修改一系列数字,…
elixir在1.2后增加了一个新的特性i helper. 在iex shell中使用i可以查看任意数据的数据类型和详细描述 #查看变量描述 iex(1)> i {:test, "That sounds great"} Term {:test, "That sounds great"} Data type Tuple Reference modules Tuple #查看Module描述(有点类似于Erlang的lists:module_info) iex(2…
入门 启动Shell 在cmd中输入命令”erl”,百分号(%)表示一个注释的开始,从百分号开始到这行结束的所有文本都被看做是注释. 一个完整的命令需要以一个句点和一个回车结束. 退出erlang的命令是q(). 命令 f() 会让 shell释放它所绑定过的所有变量.即所有的变量都编程自由变量. 变量 所有的变量必须以大写字母开头. Eralng的变量只能被赋一次值,第二次赋值会出现匹配失败的错误.一个变量如果含有一个被赋予的值,就称为绑定变量,否则称为自由变量.一开始所有变量都是自由的. 在…
http://blog.csdn.net/karl_max/article/details/3976372 1. erlang:halt()可以即刻停止系统运行. 2. q()命令可以完成文件和数据库的一些处理后再退出.它是init:stop()的一个shell别名 3. erlang可以动态加载代码,正在运行的代码可以在重新编译后动态加裁而不用停止程序的运行. 4. 模块加载相关函数: code:get_path() %% 可以获取当前加载路径的设定值. code:all_loaded() %…
http://wgcode.iteye.com/blog/1007623 第二章 入门 1.所有的变量都必须以大写字母开头,如果要查看某个变量,只要输入变量的名字即可,如果一个变量被赋予值,就称为绑定变量,否则被称为自由变量,一开始所有变量都是自由的. 有一点像Java中的常量,这就是为什么用大写字母的原因. 2.  “=” 近似于一个赋值操作符,是一个模式匹配运算符,当X是自由变量未被赋值时“=”是赋值运算符,否则是模式匹配运算符. 3. “/”除号永远返回浮点数. 4. 原子用来表示不同的非…
http://wenku.baidu.com/link?url=AUQR8Hn-e-fEB_lqjXsd8XfapWj1qAK7J05JoBXFib_LlSk5qSOTia8HIxNV1XkeZi-kHFsH18Qb9NED5PKiPb8h6oDFVR6KG75MUSYAAMm Erlang 学习笔记    一.Erlang语言特征重点  1.catch是返回表达式的值或者错误信息的元组 try…catch是可以捕捉不同的错误类型以及有流程控制  2.发送消息永远不会失败,如果尝试发送消息给一个…
概述 类似Java中的Maven,Gradle,在Erlang中同样也有包管理的工具,Rebar提供Erlang依赖(包)管理机制,开发人员可以重复使用已有的模块,通过rebar引入自己的项目直接使用,通过GIT获取托管在github或码云上的项目. 使用依赖 1.找到github或码云上将要用到的项目GIT地址,为演示使用自己的项目,git地址为: https://git.oschina.net/woniu201/erlanglib.git  2.修改rebar.config配置文件    继…
概述 通过rebar可以发布rebar构建的erlang项目,生成可执行的二进制脚本文件,大大降低了执行应用的复杂度.该笔记Erlang环境为Erlang/OTP 19 ,以下适用于Eralng/OTP 15以上. 发布应用 使用笔记一的mqtt项目.步骤如下: 1.创建发布文件夹 mkdir rel && cd rel 2.创建节点 rebar  create-node nodeid=mqtt 成功后,生成如下文件夹 3.修改reltool.config配置文件 修改27行,{app,…
erlang shell 命令: help(). 可以查看erlang shell内置命令. 比如:m(Mod),可以查看模块Mod. 待续..…
CSS Text 1> Text Color used to set the color of the text 2> Text Alignment used to set the horizontal alignment of a text text-align: left|right|center|justify|initial|inherit; 3> Text Decoration used to set or remove decorations from text text-d…
lists:foldl(fun(),参数1,参数2):这个函数就是先把参数1传给fun()处理,然后将参数2(列表)中每一个元素,依次传给fun()函数进行处理. lists:foldl(fun(Elem, AccIn) ->   [B,C] = string:tokens(Elem, "="),   [{list_to_integer(B),list_to_integer(C)}|AccIn] end, [],   string:tokens("1=2,3=4,5=6…
今天,为了安装RabbitMQ,需要安装Erlang,中间遇到了一些坑,记录下来. 1. 下载Erlang安装包 http://www.erlang.org/downloads http://erlang.org/download/otp_src_18.3.tar.gz 2. otp_src_18.3.tar.gz 拷贝到机器 @m1-cm-uap-srv81.m1,注意,后面的安装需要使用root权限 3. tar zxvf xxx ; cd otp_src_18.3 ; ./configur…
字符串是双引号,单引号的是atom元组: 下标从1开始 X = {'test1',2,3,4}. element(1,X). 配合模式匹配,可以给元素项命名,直接不用下标标记元素项 列表增删改查 增加: 通过管道符号,把左边的数据添加到右边的列表 [5,4,3|[1,2]]. 两个列表通过 ++ 生成新列表 [1,2,3,4] ++ [7,8,9,10]. 删除: 大列表--小列表,当然是生成新变量了 [1,2,3,4,5,6,7,8] -- [1,2,3,4]. 修改: erlang变量不可以…
函数%###geometry.erl###-module(geometry). 定义-export([area/1, function1/2, function2/0, ...]).area({rectangle, Width, Height}) -> Width * Height;area({square, X}) -> X * X;area({circle, R}) -> 3.1415926 * R * R. 编译c(geometry). 调用geometry:area({recta…
转自:http://qqdenghaigui.iteye.com/blog/1554541 一,带函数Pred1, all(Pred, List) -> boolean()如果List中的每个元素作为Pred函数的参数执行,结果都返回true,那么all函数返回true,否则返回false 例子: lists:all(fun(E) -> true end,[1,2,3,4]). 结果 true 2, any(Pred, List) -> boolean()如果List中至少有一个元素作为…
1 .同时打开的端口数量限制(Open ports) erlang:system_info(port_limit)查询 可以通过环境变量ERL_MAX_PORTS修改,或者配置erlang启动参数(标志+Q)修改(erl +Q 10000) 2.ets表的数量限制 默认值是1400,可以通过环境变量ERL_MAX_ETS_TABLES修改,或者配置erlang启动参数(标志+e)(erl +e 2000) 3. Erlang默认创建进程限制 erlang:system_info(process_…
集成开发环境:IntelliJ IDEA的Erlang插件 教程:www.erlang-cn.com/462.html,寻找erlang程序设计第2版pdf f():释放之前绑定过的所有变量. -export([Name/N]):表示带有N个参数的名为Name的函数. Erlang中同一模块同名但是参数个数不同的两个函数,是两个完全不同的函数,他们之间除了名字相同,别无关联. -import():从模块导入函数,以后使用时不需要加模块名前缀. -export():从模块导出,以便于在模块之外的其…