当前位置: 首页 > news >正文

高并发语言erlang编程初步

初步

下载安装与初步使用

下载并安装,然后开始菜单中有对应的图标,打开就能进入erlang的命令行。当然也可以将其安装路径的bin文件夹加入环境变量,然后就可以在命令行中输入erl进入erlang了。

erlang语言中,语句结束需要用.标示,注释符号为%。在命令行中,输入一条正确的语句可以直接返回结果

1> 1+1.
2

这个时候有人会问了,要是用.结尾的话,那我要写个小数怎么办?这个大可不用担心,erlang还是能分清是小数点和结尾的句号的

2> 3/3.0.
1.0

退出命令行可通过halt().函数来实现,进出命令行的整个流程如下

>erl
Eshell V13.1.4  (abort with ^G)
1> halt().E:\Documents\00\0219>

变量和函数

erlang中变量需用大写字母开头,小写开头的数据类型叫做原子,不可以赋值,而只能作为标识符。而即使是大写字母开头的变量,一经赋值,其实也是不可更改的

1> A = 1.
1
2> A = 2.
** exception error: no match of right hand side value 2

这种不可更改变量的逻辑,加强了函数式的性能。erlang中的函数定义可以十分简洁而直观,例如像下面这样,Add就是一个函数,通过->...end来划分函数块。

Add = fun(X, Y)->X+Y end.
Add(1,2).
% 返回 3 % erlang用%做注释

切记变量首字母要大写,X, Y不能写为x, y,否则成了原子,没法赋值是要报错的,那么原子有什么用呢?

例如现在要做一组弧度角度转换函数,可以写成这种

1> Convert = fun(X,rad)->X/3.14*180;(X,deg)->X/180*3.14
end.
#Fun<erl_eval.41.3316493>
2> Convert(3.14, rad).
180.0
3> Convert(360, deg).
6.28

这样一看是不是显得十分简洁。

模块

写好一个函数之后,可将其封装在模块里,在erlang中,模块需要保存在.erl文件里,且在编译后可以运行。

-module(deg).
-export([convert/2]).
convert(X, deg) ->X / 360 * 3.1415926;
convert(X, rad) ->X / 3.1415926 * 360.

其中,第一行module(deg)表明这是个模块,模块的名字叫deg,同时要求文件的名字必须与模块名相同,即deg.erl

第二行export([convert/2])表示准备暴露给调用者的函数为convert,而convert这个函数有2个参数。

第三行后面就是convert的具体内容,这里和命令行中的fun定义方式稍有区别,但也很容易理解。

将上述代码写入add.erl之后,可在命令行中编译,并通过deg:convert的方式进行调用

1> c("deg.erl").
{ok,deg}
2> deg:convert(360, deg).
3.1415926
3> deg:convert(3.14, rad).
359.81750147998184

基本类型

erlang中,基本的数据类型是数字Number和原子AtomNumber又包括整数和浮点数。erlang中提供了一些用于数值的函数

类别函数
三角函数sin, cos, tan, asin, acos, atan
其他函数exp, log, abs
类型函数float, is_float, is_integer

前面提到,原子必须以小写字母开头,其实并不完全。通过单引号括起来的字符也可以当作原子。

Erlang中有两个特殊的原子,即truefalse,属于布尔类型。

此外,erlang中还有位串、元组、映射、列表等类型,相对复杂,故放在后面讲解。

http://www.lryc.cn/news/26056.html

相关文章:

  • springboot 问题记录
  • 【PAT甲级题解记录】1034 Head of a Gang (30 分)
  • Python搭建一个steam钓鱼网站,只要免费领游戏,一钓一个准
  • maven 私服nexus安装与使用
  • 详解数据结构中的顺序表的手动实现,顺序表功能接口【数据结构】
  • 【二】kubernetes操作
  • 如何在 C++ 中调用 python 解析器来执行 python 代码(五)?
  • 八 SpringMVC【拦截器】登录验证
  • PhotoShop基础使用
  • 借助阿里云 AHPA,苏打智能轻松实现降本增效
  • 美团2面:如何保障 MySQL 和 Redis 数据一致性?这样答,让面试官爱到 死去活来
  • react hooks学习记录
  • 创新型中小企业认定评定标准
  • 记录一次nginx转发代理skywalking白屏 以及nginx鉴权配置
  • 如何使用FarsightAD在活动目录域中检测攻击者部署的持久化机制
  • Python - 操作txt文件
  • 老杜MySQL入门基础 1
  • Vue中splice的使用
  • Ubuntu通过rsync和inotify实现双机热备
  • 【python】异常详解
  • pc、移动端自适应css
  • Threejs 教程1
  • WuThreat身份安全云-TVD每日漏洞情报-2023-02-23
  • C语言--模拟实现库函数qsort
  • 面向专业课教学和学习的《计算机数学》点播工具
  • 域权限维持之创建DSRM后门
  • 【苹果内购支付】关于uniapp拉起苹果内购支付注意事项、实现步骤以及踩过的坑
  • 一:BT、BLE版本说明及对比
  • php宝塔搭建部署实战多模板cms管理系统源码
  • 【数据结构初阶】手把手带你实现栈