Erlang快速入门(一)

Erlang快速入门,首要是动手敲起来。

Erlang快速入门,首要是动手敲起来。

一言不合反手上来就是一个 Hello World 。

% hello world program
-module(hello).
-export([sayhi/0]).

sayhi() ->
io:fwrite(“hi,hello world!\n”).

 

erlc 命令行编译 hello.erl 文件 得到 hello.beam

➜  erlc hello.erl

命令行里运行起来,

➜ erl -noshell -s hello sayhi -s init stop

hi,hello world!

简要的说明:

  • % 是注释
  • – 是模块或者导入导出的连接符
  • 分界符是点  .
  • module 是定义模块名,用于区分命名空间。(需要用和去掉文件名一致的名称,比如hello.erl 就用module(hello),否则就报错)
  • 反斜杠 /0 表示 sayHi 没有一个参数

erlang shell

Erlang快速入门语法

➜ erlang erl
Erlang/OTP 25 [erts-13.0.3] [source] [64-bit] [smp:12:12] [ds:12:12:10] [async-threads:1] [jit:ns] [dtrace]

Eshell V13.0.3 (abort with ^G)
1> 30*5.
150

2>

如何能联网,可以直接在网上进行运行 Erlang快速入门网上运行。

Erlang 的运算符

基础的算数运算符,加、减、乘、除是相同的 +、-、*、/ 。Erlang 不同于 Go 的运算符是 rem (第二个数除以第一个数的余数)和 div (除,但是返回整数部分)

1> 10 rem 3.
1
2> 10 div 3.
3

关系运算中,Erlang 使用的是  /= 表示不等于,而 Golang 中都是用的 != 表示不等于。

 

Erlang 中的循环

Erlang中没有 For 循环!Yes! 您没看错,

同时执行语句

用递归实现一个 while 循环

-module(helloworld). 
-export([while/1,while/2, start/0]). 

while(L) -> while(L,0). 
while([], Acc) -> Acc;

while([_|T], Acc) ->
   io:fwrite("~w~n",[Acc]), 
   while(T,Acc+1). 
   
   start() -> 
   X = [1,2,3,4], 
   while(X).

 

for 循环也没有,用递归在实现一个  for

声明

 

% 我们正在定义一个递归函数,该函数将模拟我们的的实现for循环。
% 我们在“ for”函数中使用了保护措施,以确保N的值或极限为正值。
% 我们通过在每次递归中减小N的值来递归调用for函数。

-module(for).
-export([for/2,start/0]).

for (0,_) ->
[];

for (N,Term) when N >0 ->
io:fwrite(“Hello~n”),
[Term|for(N-1,Term)].

start() ->
for (5,1).

Erlang if condition 条件判断

直接用像 Rust 中的 match 匹配的方式,不用 if 语句。

-module(condition).
-export([start/0]).

start() ->
A = 3,

case A of
3 -> io:fwrite(“the value is 3”);
6 -> io:fwrite(“the value is 6”)

end.

Erlang 函数

Erlang 中的函数,参数不知道为啥一定要用大些的,不然会编译报错。

-module(function).
-export([add/2,add/3,divi/2,mutipli/2,start/0]).

add(X,Y) ->
A = X+Y,
io:fwrite(“~w~n”,[A]).

add(X,Y,Z) ->
A = X+Y+Z,
io:fwrite(“~w~n”,[A]).

divi(X,Y) ->
Z = X/Y,
io:fwrite(“~w~n”,[Z]).

mutipli(M,N) ->
X = M*N,
io:fwrite(“~w~n”,[X]).

start() ->
add(7,8),
add(7,8,9),
divi(15,3),
mutipli(9,9).

我试了下,divi,mutipli 这两个函数我不在 export中标明参数个数,不影响编译和运行。 Erlang 函数参数个数不能灵活指定吗?像 Go 一样搞一个 func A (a int ,…) 动态加参数个数。其实,在 Erlang 中,add/2 和 add/3 是两个不同的函数。

 

而且变量需要用大些开头的字母。