erlang的基本语法
来源:互联网 发布:传奇db数据库详解 编辑:程序博客网 时间:2024/05/16 13:42
1、变量
1)erlang变量变量必须以大写字母或者下划线开头,可以包含字母、下划线和@;
2)变量只容许赋值一次
2、数字类型
1)B#Val表示以B进制存储的数字Val,比如
7> 2#101.
5
二进制存储的101就是10进制的5了
8> 8#101.
65
八进制存储的101就是10进制的65了
2)$Char表示字符Char的ascii编码,比如$A表示65
3、atom
可以理解成常量,它可以包含任何字符,以小写字母开头,如果不是以小写字母开头或者是字母之外的符号,需要用单引号包括起来,比如abc,'AB'
4、Tuple,元组,可以理解成定长数组,是Erlang的基础数据结构之一:
8> {1,2,3,4,5}.
{1,2,3,4,5}
9> {a,b,c,1,2}.
{a,b,c,1,2}
10> size({1,2,3,a,b,c}).
6
5、list
另外一个基础数据结构就是各个语言都有的list(列表),在[]内以,隔开,可以动态改变大小,
[123, xyz]
[123, def, abc]
[{person, 'Joe', 'Armstrong'},
{person, 'Robert', 'Virding'},
{person, 'Mike', 'Williams'}
]
可以使用内置函数length求列表大小。
6、Erlang中函数的定义必须在一个模块内(Module),并且模块和函数的名称都必须是atom,函数的参数可以是任何的Erlang类型或者数据结构,函数要被调用需要从模块中导出,函数调用的形式类似:moduleName:funcName(Arg1,Arg2,...).
7、内置的常用函数:
date()
time()
length([1,2,3,4,5])
size({a,b,c})
atom_to_list(an_atom)
list_to_tuple([1,2,3,4])
integer_to_list(2234)
tuple_to_list({})
hd([1,2,3,4]) %输出1,也就是列表的head,类似Lisp的car
tl([1,2,3,4]) %输出[2,3,4],也就是列表的tail,类似List的cdr
8、常见Shell命令:
1)h(). 用来打印最近的20条历史命令
2)b(). 查看所有绑定的变量
3) f(). 取消(遗忘)所有绑定的变量。
4) f(Val). 取消指定的绑定变量
5) e(n). 执行第n条历史命令
6) e(-1). 执行上一条shell命令
9、apply函数,它的调用方式如下:
apply(Mod, Func, Args),三个参数分别是模块、函数以及参数列表,比如调用我们的第一个Erlang程序:
apply(helloWorld,run,[dennis]).
10、Guard,用于限制变量的类型和范围,比如:
number(X) - X 是数字
integer(X) - X 是整数
float(X) - X 是浮点数
atom(X) - X 是一个atom
tuple(X) - X 是一个元组
list(X) - X 是一个列表
length(X) == 3 - X 是一个长度为3的列表
size(X) == 2 - X 是一个长度为2的元组
X > Y + Z - X >Y+Z
X == Y - X 与Y相等
X =:= Y - X 全等于Y
(比如: 1 == 1.0 成功
1 =:= 1.0 失败)
为了方便比较,Erlang规定如下的比较顺序:
number < atom < reference < port < pid < tuple < list
其中pid就是process的id。
11、if和case语句
if语句的结构如下:
if
Guard1 ->
Sequence1 ;
Guard2 ->
Sequence2 ;
...
end
而case语句的结构如下:
case Expr of
Pattern1 [when Guard1] -> Seq1;
Pattern2 [when Guard2] -> Seq2;
PatternN [when GuardN] -> SeqN
end
if和case语句都有一个问题,就是当没有模式匹配或者Grard都是false的时候会导致error,
通过_指代任意的Expr,返回true,而if可以这样:
if
true ->
true
end
一样的道理。case语句另一个需要注意的问题就是变量范围,每个case分支中定义的变量都将默认导出case语句,也就是在case语句结束后可以被引用,因此一个规则就是每个case分支定义的变量应该一致,不然算是非法的,编译器会给出警告,比如:
f(X) ->
case g(X) of
true -> A = h(X), B = A + 7;
false -> B = 6
end,
h(A).
如果执行true分支,变量A和变量B都被定义,而如果执行的false分支,只有变量B被定义,可在case语句执行后,h(A)调用了变量A,这是不安全的,因为变量A完全可能没有被定义,编译器将给出警告
variable 'A' unsafe in 'case' (line 10)
0
上一篇:erlang语言编辑环境的搭建
下一篇:erlang中如何调试程序?
相关热门文章
- APP开发流程,你知道多少...
- c++几种类型转换的相关介绍...
- Linux设备驱动程序学习(20)-...
- QEMU源码分析系列(三) ...
- gdb的基本工作原理是什么?...
- jsp problem
- OpenBSD系统的文件布局[转]...
- 送给FreeBSD和UNIX的初学者...
- Tmux使用初体验
- emacs最简单入门,只要10分钟...
- linux dhcp peizhi roc
- 关于Unix文件的软链接
- 求教这个命令什么意思,我是新...
- sed -e "/grep/d" 是什么意思...
- 谁能够帮我解决LINUX 2.6 10...
给主人留下些什么吧!~~
评论热议
0 0
- erlang的基本语法
- erlang的基本语法
- Erlang基本语法
- Erlang基本语法一
- erlang 符号相关基本语法
- Erlang基本语法汇总【转】
- Erlang的语法
- erlang语法
- 【erlang学习】解惑 erlang的oop语法糖
- 简单的语法高亮 Erlang 编辑器
- erlang学习笔记二 ---精悍的语法
- 主要erlang语法的汇编实现
- Erlang基础 - 变量的语法与赋值
- erlang初步,从倾国倾城开始学习erlang,第一篇-基本语法
- 查询的基本语法
- PB的基本语法
- C#的基本语法
- ORACLE的基本语法
- VSFTP配置参数详解
- (二)centos 常用命令和安装
- erlang语言编辑环境的搭建
- Android蓝牙通信,把硬件传过来的16进制的int数据转成16进制的string数据
- FTP上传核心方法
- erlang的基本语法
- erlang中如何调试程序?
- java对File的特殊操作
- erlang数据类型转换
- linux ps 命令好记性不如烂笔头
- cp
- Hadoop学习笔记(3)-java操作hdfs的API接口
- 在mybatis下使用日期比对出错
- erlang客户端程序学习(一)
原创粉丝点击
热门IT博客
热门问题
老师的惩罚
人脸识别
我在镇武司摸鱼那些年
重生之率土为王
我在大康的咸鱼生活
盘龙之生命进化
天生仙种
凡人之先天五行
春回大明朝
姑娘不必设防,我是瞎子
haohan
浩然
浩然的含义
浩然名字的含义
孩子起名叫浩然很后悔
浩然途 死阎王
秦临天下 浩然时间
浩然的意思是什么
浩然儒圣 云山望岳
浩然名字的意义
浩然九界 古山居士
浩然名字的寓意和来源
末世之无限魔化 浩然公子
完美魔神系统 魔卍浩然
海贼之响雷果实 浩然
巴彦浩特
浩特
呼伦浩特
呼呼浩特
浩特电热膜
浩特电饭锅
查干浩特
呼特浩特
浩特是什么意思
浩特心脏监测仪
巴彦浩特属于哪个市
浩特电压力锅
浩特电器有限公司
浩珉演唱会
浩田
浩男西服
浩盛
浩石
膏石
蓝锆石价格表
gaoshi
皓石是什么
皓石多少钱一克
鋯石
锆石的功效与作用
锆石怎么读