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.
1502>
如何能联网,可以直接在网上进行运行 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 是两个不同的函数。
而且变量需要用大些开头的字母。
原文链接 Erlang快速入门(一)