Erlang

1.erl文件头部

-module(person).
-export([init/1,test/2]).  %未在此处被申明的函数不可在模块外部被调用
-import(lists,[map/2,sum/1]). %lists是erlang的标准库,在此导入其中的map和sum两个函数

init(name) ->

test(a,b) ->

-module(person).代表此文件包含用于person的模块代码,与文件名person.erl一致,模块名必须以小写字母开头
-export是一条导出申明,代表函数init可以在模块外部被进行调用,/1代表带有一个参数

2.变量

X=2

erlang里的变量必须以大写字母开头,并且一旦定义了变量的值,就不能再改变
定义了X=2之后,再给变量重新赋值X=999,会报错。

3.命令行模式,编译,执行

在命令行的shell里,逐行运行。每行结尾以句号加空白(空格,回车或tab)来结束。

$ erl    启动
c(hello) 编译
hello:start() 执行hello模块下的start函数
halt() 停止

4.除法

使用/来运算时,得到的结果都是浮点数。

4/2    得到结果2.0
5 div 3 得到结果1
5 rem 3  5%3,得到结果2
4 rem 2   得到结果2

5.元组,列表

person = {a,{footsize,45},joe,89}
{A,B,C,D} = person  % D被赋值为89

[T|Y]  T是列表头,Y是列表尾,[|]这种形式通常写在赋值等式的左边。
T有可能为单个元素或者元组或者一个列表,Y必须为列表

%列表推导式
L = [1,2,3]
[X*2||X <- L]    %列表L内的元素依次经过X*2这个函数,得到
[2,4,6]

6.字符串,字符

X = $s   % 将s的ASCLII码值赋值给X
% erlang里其实没有严格意义上的字符串,字符串可以看成一个整数列表
% [1,2,3]  如果一个列表里的整数在ASCII码表里无对应,就是他本身
% [1,2,3]
% [83,117] 否则视为一个字符串
% "Su"
Name = "hello"  %必须使用双引号来赋值

7.函数

-module(geo).
-export([]).
area({a,Width,Height}) -> Width*Height;
area({b,Side}) -> Side*Side.

case(X,Y,Z) ->    %一个函数下有多行语句,每行末尾以,号结束,最后一行以.号结束。
     X = 2,
     Y = 1,
     Z = 3.
     

这个area函数有两个子句,都只有一个字典作为参数,首句以;隔开,末句以.结尾。
使用geo:area({a,12,3})匹配到第一个子句
使用geo:area({b,3})匹配到第二个语句。
如果使用这样的写法要注意考虑所有的情况(为空等等),如果像for循环的递归,注意要给个出口。

8.for循环

erlang里没有for循环,需要自定义函数来模拟for循环。

for(MAX,MAX,F) -> [F(MAX)];
for(I,MAX,F) -> [F[I]|for(I+1,MAX,F)].
%其中F是一个需要自定义的函数。
for(1,10,fun(X) -> X end)  %生成[1,2,3,4,5,6,7,8,9,10]
for(1,10,fun(X) -> X*X end) %生成[1,4,9,16,25,36,49,64,81,100]

9.标准库

erlang里有个标准库lists。
lists中的map函数,让列表里的元素一次迭代,作为参数进入前面的fun中运算,结果写入一个列表。

L = [1,2,3,4]
lists:map(fun(X) -> X*2 end,L)
[2,4,6,8]

10.内置函数

用erlang很难实现或者实现非常低效的操作被封装为内置函数
如list_to_tuple(将列表转为元组),time()(以时分秒返回当前时间)
可以在shell模式下直接调用。

11.关卡

关卡就是when,可以在支持函数表达式的地方或者函数定义的头部使用它。

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

12.if和case语句

if
 X>2->
   B=2;       %这边的条件X>2,Y<9是并列的,所以这里要加个;号
 Y<9->
   B=3true->
   B=0       %这是最后一个表达式,末尾不需要加;号
end

%if会在下方列出的所有条件里逐条比对,直到找到符合条件的,执行下方的语句
%如果没有找到符合条件的语句就会报错,所以通常最后一个条件会放一个原子true,保证不报错

```erlang
case P(H) of 
   1 ->          %这边的1,2都是表达式P(H)的运行结果
     X=2;
   2 ->
     X=3
 end

其他

判断是否等于 =:=

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LSQ的测试日记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值