Erlang笔记 -- 基础

Hello World

%% hello.erl
-module(hello).
-export([start/0]).

start() ->
    io:format("Hello World~n").

上述文件中,
-module(hello).指的是此文件包含用于hello模块的代码。它应该与文件名一致(除了.erl这个文件拓展名)。模块必须以一个小写字母开头。模块名属于一个原子。
--export([start/0]).表示没有参数的函数start可以在模块外调用(类似于Java中的public)。如果想导出多个函数,使用以下语法:

-export([function1/N1, function2/N2, ...]).
Erlang Shell

可在控制命令行输入erl进入Erlang shell,用halt()方法退出。
在Erlang shell中,c(moduleName).命令编译moduleName.erl文件里的代码,并生成moduleName.beam文件。例如:

PS E:\ErlangFile> erl
Eshell V8.3  (abort with ^G)
1> c(hello).
{
   ok,hello}
2> hello:start().
Hello World
ok
3> halt().
PS E:\ErlangFile>

在Erlang shell外,编译和运行如下:

$ erlc moduleName.erl
$ erl -noshell -s hello start -s init stop

erl -noshell -s hello start -s init stop命令加载了hello模块并执行hello:start()函数。随后,执行了init:stop()终止了Erlang对话。

PS E:\ErlangFile> erlc hello.erl
PS E:\ErlangFile> erl -noshell -s hello start -s init stop
Hello World
PS E:\ErlangFile>

Erlang基础

1. 注释

Erlang里的注释从一个百分号字符(%)开始,一直延伸到行尾。Erlang没有块注释。

2. 数字

Erlang里的数字不是整数就是浮点数。

  1. 整数
    整数的运算是精确的,而且用来表示整数的位数只受限于可用的内存。
    整数可以有三种不同的写法。
  • 传统写法
  • K进制整数 除10以外的数字进制整数使用K#Digits这种写法。
1> 16#11.
17
2> 32#12.
34
  • $写法 $C这种写法代表了ASCII字符C的整数代码。
  1. 浮点数
    一个浮点数由五部分组成:一个可选的正负号,一个整数部分,一个小数点,一个分数部分和一个可选的指数部分。
1> 4/2.
2.0
2> 5/3.
1.6666666666666667
3. 变量
  1. Erlang中的变量以大写字母开头。
  2. 可用"="操作符给变量赋值,严格来说是给变量绑定一个值。因为在Erlang中,变量一旦绑定了值,就不允许重新绑定。“=” -> 模式匹配符。
  3. 以小写字母开头的不是变量而是符号常量,称为原子。
4. 原子(atom)
  1. 在Erlang中,原子是全局性的,而且是不需要宏定义和包含文件即可实现的。
  2. 原子以小写字母开头,后接一串字母、数字、下划线、@符号。原子还可以放在单引号( ’ )中。可以用这种方式创建以大写字母开头的或者包含其他符号的原子,如'Monday', '*&^123'。甚至可以给无需引号的原子加上引号,因此'a'a的意思是完全一致的。
5. 元组(tuple)

元组,用于保存固定数量的元素。创建元组的方法就是用大括号{}把想要表达的值括起来,并用逗号分隔他们。

6. 列表(list)

列表,被用来存放任意数量的事物。创建列表的方法是用中括号[]把列表元素括起来,并用逗号分隔开。

7. 字符串

严格来说,Erlang里没有字符串。要在Erlang中表示字符串,可以选择一个由整数组成的列表或者二进制型。当字符串表示为一个整数列表时,列表里的每个元素都代表了一个Unicode代码点。
可以用字符串字面量来创建一个列表。字符串字面量其实就是用双引号围起来的一串字符。

1> Name = "Hello".
"Hello"

"Hello"其实是一个列表的简写,这个列表包含了代表字符串里各个字符的整数字符代码。
当shell打印某个列表的值时,如果列表里的所有整数都代表可打印字符,他就会将其打印成字符串字面量。否则打印成列表记法。

Eshell V8.3  (abort with ^G)
1> [1,2,3].
[1,2,3]
2> [115,117,114,101].
"sure"
3> [1,115,117,114,101].
[1,115,117,114,101]

另外,$a代表字符a的整数。

Eshell V8.3  (abort with ^G)
1> I = $s.
115
2> [I-32,$u,$r,$e].
"Sure"

用列表来表示字符串时,它里面的各个整数都代表Unicode字符。必须使用特殊格式的语法才能输入某些字符,在打印列表时也需要选择正确的格式惯例。

Eshell V8.3  (abort with ^G)
1> X = "a\x{221e}b".
[97,8734,98]
2> io:format("~ts~n", [X]).
a\x{
   221E}b
ok

如果shell将某个整数列表打印成字符串,而你想打印成一列整数则需要使用格式化:

Eshell V8.3  (abort with ^G)
1> X = [97,98,99].
"abc"
2> io:format("~w~n", ["abc"]).
[97,98,99]
ok

模块

模块是Erlang的基本单元。模块保存在扩展名为.erl的文件里,而且必须先编译才能运行模块里的代码。编译后的模块以.beam作为扩展名。

-module(bit_test).
-compile(export_all).
-mytags("This is my tags").

reverse_bitstring_by_byte(BitString) ->
  ByteList = [Byte || <<Byte:8>> <= BitString],
  ReverseByteList = lists:reverse(ByteList),
  ReverseBitString = list_to_binary(ReverseByteList),
  ReverseBitString.
  
reverse_bitstring_by_bit(BitString) ->
  BitList = [Bit || 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值