A language that doesn’t affect the way you think about programming is
not worth knowing. --- Alan Perlis

Erlang 虽然是门小众的语言,在并发方面十分出色,有其独特的哲学和语法,是一门很值得了解的语言。]
下面介绍一下 Erlang 比较有特色的地方。

Pattern matching

如果一个变量,没有值,则可以用来做赋值。比如 X = 1.

A = [1, 2, 3].
[H|T] = A.
H = 1.
T = [2, 3].

也可以用来做检查:

point % 以小写字母开头的是 atome,有些类似 ruby 的 symbol
Point = {point, 10, 45}.{point, X, Y} = Point.  % X = 10, Y = 45
{abc, X, Y} = Point.
% ** exception error: no match of right hand side value {point,10,45}{point, Z, Z} = Point.
% ** exception error: no match of right hand side value {point,10,45}

用来做 dispatch:

area({rectangle, Width, Ht}) -> Width * Ht;
area({circle, R})            -> 3.14159 * R * R.

Guards

guards 类似 ruby 的 case,区别是可以用来定义方法,这样,一个方法就被分解成了不同部分,使 Erlang 的方法变得更短。

max(X, Y) when X > Y -> X;
max(X, Y) Y.

filter:

filter(P, [H|T]) ->case P(H) oftrue  -> [H|filter(P, T)];false -> filter(P, T) end;
filter(P, []) ->[].

更短的 filter:

filter(P, [H|T]) ->  filter1(P(H), H, P, T);
filter(P, [])    ->  [].filter1(true, H, P, T)  -> [H|filter(P, T)];
filter1(false, H, P, T) -> filter(P, T)

递归

sum([], N)    -> N;
sum([H|T], N) -> sum(T, H+N).

在 Erlang 中,递归被大量使用。
递归有两个好处,一个是可以用来分解问题,使问题变得很容易处理。
一个是,递归可以显示的维护状态,避免了赋值,维持了 immutable,方便维护和方便并发。

小结

Erlang 非常独特,这些独特之处可以帮助、规范程序员分解问题,让 Erlang 的代码变得更好维护。

独特的 Erlang -- Eralng 学习笔记 (1)相关推荐

  1. 【Erlang】学习笔记-erlang基础语法

    一.关于erlang erlang是函数式编程语言,最初主要用在电信软件开发,他是面向并发编程的,和主流语言相比,主流语言并不能很好的利用多核CPU的资源,采取加锁的方式使得编程易出错,且锁也是耗资源 ...

  2. Erlang 基础学习笔记

    A -> 42 表示变量A的值为42. 16#cafe * 32#sugar 表示16进制和32进制数相乘. 所有的变量都必须以大写字母开头. Erlang的变量是一个单一变量(变量不变). & ...

  3. Java基础(学习笔记)

    其他文章链接 Java基础 Java集合 多线程 JVM MySQL Redis docker 计算机网络 操作系统 文章目录 前言 1.⾯向对象和⾯向过程的区别 2.Java 和 C++的共性与区别 ...

  4. 网易微专业之《前端开发工程师》学习笔记(1)

    何为网易微专业? 微专业是由网易云课堂联合各领域知名专家,以就业为导向,精心打造的职业培训方案. 按要求完成学习,考试通过可获得专业认定证书,令你求职或加薪多一份独特优势. 一个微专业包含了多门必修课 ...

  5. CUBRID学习笔记 1 简介 cubrid教程

    CUBRID 是一个全面开源,且完全免费的关系数据库管理系统.CUBRID为高效执行Web应用进行了高度优化,特别是需要处理大数据量和高并发请求的复杂商务服务.通过提供独特的最优化特性,CUBRID可 ...

  6. tensorflow学习笔记——使用TensorFlow操作MNIST数据(1)

    续集请点击我:tensorflow学习笔记--使用TensorFlow操作MNIST数据(2) 本节开始学习使用tensorflow教程,当然从最简单的MNIST开始.这怎么说呢,就好比编程入门有He ...

  7. sql 2005学习笔记1

    sql 2005学习笔记1 最近开始看赵松涛的<SQL 2005数据奥秘>,发现是本十分不错的独特的SQL 2005的书,讲了很多深入的东西,现学习之并每次笔记要点之. 1 SQL 200 ...

  8. 强化学习笔记4:强化学习分类

    1 model-free & model-based model-based(有模型) RL agent,它通过学习环境的状态转移来采取动作. model-free(免模型) RL agent ...

  9. Kubernetes学习笔记(一)

    2019独角兽企业重金招聘Python工程师标准>>> Kubernetes学习笔记(一) 博客分类: Kubernetes 导语 2015年4月,传闻已久的Borg论文伴随Kube ...

  10. haxe php,Haxe学习笔记(一) Haxe:一次编码全平台编译的神话

    Haxe学习笔记(一) Haxe:一次编码全平台编译的神话 一 Haxe是什么? Haxe是开源的,它作为一门语言,基础语法和ActionScript3基本一致.所以任何做过Flash开发的人都可以很 ...

最新文章

  1. 优化一个小时不出结果的SQL
  2. Android 内存泄漏问题分析 指南
  3. PHP生成日历(实例详解)
  4. Java生态系统– 2014年我的5大亮点
  5. uniapp 可视化开发_uniapp的简单安装流程使用教程
  6. 动态规划——最大子矩阵(hdu1081)
  7. UVa 816 (BFS求最短路)
  8. 关于if 判断等于0 和‘0’的问题
  9. ubuntu下谷歌开源的TensorFlow Object Detection API的安装教程
  10. java自带的字节码技术_读懂字节码-还原JAVA源码
  11. 324.摆动排序II
  12. Linux访问交换机FTP,华为交换机使用FTP查看下载文件
  13. 智能手机基于众包的室内定位
  14. C++实现坦克大战(超详细)(文末附源码!!!)
  15. 《数据结构与算法基础 严蔚敏版》第一章 绪论
  16. WIN10和Ubuntu共享蓝牙连接配对
  17. 天南地北双飞客,老翅几回寒暑!
  18. react简书项目学习笔记38如何拿到页面的输入值
  19. 项目经理年终总结|一个高层项目管理者的年终反思
  20. 如何使用Python从图片中提取文字?

热门文章

  1. 提高页面渲染速度的建议以及方案
  2. MySQL二进制包安装简略过程
  3. Java克隆--深克隆与浅克隆的区别
  4. 基于jquery的ajax分页效果
  5. django uWSGI nginx搭建一个web服务器 确定可用
  6. OpenCV+MFC 打开文件并显示在picture控件上
  7. luogu1970 花匠
  8. 5月2日下午学习日志
  9. python 装饰器,登录小练习
  10. Visual Studio 2010添加新项缺失[ADO.NET 实体数据模型]解决方法