Erlang笔记(01) - 搭建环境和初步了解

参考文章:

初识Erlang

  • 下载自己需要平台的Erlang版本,http://www.erlang.org/download.html
  • 对应Windows平台,点击otp_win32/64_VERSION.exe,一步一步安装
  • 安装完之后,把安装目录的bin的路径 (比如: D:\Program Files\erl5.9.1\bin) 加到PATH变量中
  • 启动bin目录下的werl.exe,或者在命令行输入erl,启动Erlang Shell的一个虚拟器,得到相关提示:“Eshell V5.9.1  (abort with ^G)”
    • Erlang Shell 里只能对 Erlang 表达式求值
    • 1>: 说明这是要输入的第一个命令
    • %: 后面跟着的是注释文字,编译器会忽略
    • 20+30.: 求表达式20+30的值,".+回车"表示一个完整命令的结束
    • 退出:Ctrl+C 或者 q(). 或者 halt().

简单入门

  • Erlang遵守标准算术表达式法则
    • 例如: 20+30*40.
    • 结果: 1220
  • 变量
    • 例如:
      • X = 1111.
      • X. 得到 1111
        • 再次执行: X = 2222. 将得到提示 "** exception error: no match of right hand side value 2222"
        • X不是传统意义上的变量,Erlang中变量的值只能一次性给定
    • 在Erlang中,=表示一个模式匹配操作。Lhs=Rhs实际上是这样一个过程,对右端求值(Rhs),然后将结果与左端(Lhs)进行模式匹配。
    • 一个变量如果含有一个被赋予的值,它就被称为绑定变量,否则就是自由变量
    • 一个变量,比如X,就是一个最简单的模式,当我们第一次输入X=something时,Erlang会问自己,“要怎么做会让这个语句的值变为true?”,由于X没有被赋值,于是将something的结果绑定到X上,使语句有效,结果皆大欢喜。
    • 但是,随后输入X=anotherthing的时候,由于X已经是绑定变量了,只有当something的值与anotherthing一致时这个语句才会成立,否则就会抛出异常。
    • Erlang里面的变量仅仅是对值的一个引用
    • f(). : 释放所有绑定的变量.
  • 浮点数
    • "/": 永远返回浮点数
    • "div": 整除
    • "rem": 取余
      • 5/3. 得到 1.6666666666666667
      • 4/2. 得到 2.0
      • 5 div 3. 得到 1
      • 4 div 2. 得到 2
      • 5 rem 3. 得到 2
  • 原子
    • 在Erlang中,原子用来表示不同的非数字常量值。
      • 类似于C中的:#define OP_READ 1 这种宏定义。
    • Erlang中的原子是全局有效的,而且无需使用宏定义或者包含文件。
    • 原子是一串以小写字母开头,后跟数字、字母或者下划线(_)或者邮件符号(@)的字符,
      • 例如monday、abc_d、aaa@somehost等。
    • 使用单引号引起来的字符也是原子,使用这种形式,我们就能使得原子可以用大写字母作为开头或者包含非数字字符,
      • 例如‘+’、‘a b c’等。
    • 一个原子的值就是原子自身
    • 讨论原子或者整数的值听上去多少有些奇怪,但是因为Erlang是个函数式语言,每一个表达式都必须有值,整数和原子这些特别简单的表达式也不例外。
  • 元祖
    • 你若想将一定数量的项组成单一的实体,那么就可以使用元组(tuple)。将若干个以逗号分隔的值,用一对花括号括起来,就形成了一个元组。
      • 例如一个叫joe的人身高1米8,那么用元组就可以表示为 { joe, 180 }。
    • 但是在Erlang中没有类型声明,因此创建一个point会是这个样子:P = {10, 20}.
    • 为了方便记忆可以给元组添加一个原子作为其第一个元素,来标记这个元组的含义,因此我们可以采用 { point, 10, 45 } 来代替上面的元组,这样更清晰。
    • 创建元祖
      • 在声明元组时就自动创建了元组,不再使用它们时,元组也随之销毁,Erlang使用垃圾收集器去收回没有使用的内存
        • 元祖嵌套
        • Person = {person, {name, joe}, {height, 1.82}}.
        • F = {firstname, joe}.
        • L = {lastname, armstrong}.
        • P = {person, F, L}.
    • 从元祖中提取字段
      • 回到之前元祖表示点的例子: Point = {point, 10, 20}.
      • {point,  X, Y} = Point. 或则 {_, X, Y} = Point. % '_'成为匿名变量
      • X, Y 就获得坐标的值
  • 列表
    • 将若干以逗号分隔的值,用一对方括号括起来,就形成了一个列表。例如:
      • ThingsToBuy = [{apples, 10}, {pears, 6}, {oranges, 3}].
      • 元素类型也可以 不同 XYZ = [1+7, hello, {cost, apple, 30-20}, 0.5].
    • 俗语:列表的第一个元素称为列表的头(head),那么剩下的,就称为列表的尾(tail)。列表的头可以是任何东西,但是列表的尾还是一个列表。
    • 定义列表:
      • 如果T是一个列表,那么 [ H | T ] 也是一个列表,这个列表以H为头,以T为尾。[]表示空列表
      • 可以用 [ E1, E2, …, En | T ] 这种形式向T的起始处加入多个新元素,例如
        • ThingsToBuy1 = [{newspaper, 1}, {banana, 5} | ThingsToBuy].
    • 从列表总提取元祖
      • [Buy1 | ThingsToBuy2] =ThingsToBuy1.
        • Buy1 的值就是 {newspaper, 1}, ThingsToBuy2 的值就是后面点元祖组成的列表。
  • 字符串
    • 严格来讲,Erlang没有字符串,字符串实际上就是一个整数列表。
      • Name = "god".
      • [103, 111, 100]. 打印得到 "god" % 只有当列表中的所有整数都是可打印的字符,它才将这个列表当做字符串来打印
    • 字符串中的字符是Latin-1
  • 模式匹配

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值