80 lines
2.6 KiB
Markdown
80 lines
2.6 KiB
Markdown
---
|
||
title: Erlang
|
||
localeTitle: 二郎神
|
||
---
|
||
## 二郎神
|
||
|
||
Erlang是一种函数式编程语言,由爱立信开发,用于电信应用。因为他们觉得电信系统有任何重大的停机时间是不可接受的,所以Erlang的构建是(除其他事项外):
|
||
|
||
* 分布式和容错_(一块失败的软件或硬件不应该导致系统崩溃)_
|
||
* 并发_(它可以产生许多进程,每个进程执行一个小的,定义明确的工作,彼此隔离但能够通过消息进行通信)_
|
||
* 可热插拔_(代码可以在运行时交换到系统中,从而实现高可用性和最小的系统停机时间)_
|
||
|
||
### 句法
|
||
|
||
Erlang大量使用**递归** 。由于数据在Erlang中是不可变的,因此不允许使用`while`和`for`循环(变量需要不断更改其值)。
|
||
|
||
这是一个递归的例子,显示了一个函数如何重复地从名称前面剥离第一个字母并打印它,只在遇到最后一个字母时停止。
|
||
|
||
```erlang
|
||
-module(name).
|
||
|
||
-export([print_name/1]).
|
||
|
||
print_name([RemainingLetter | []]) ->
|
||
io:format("~c~n", [RemainingLetter]);
|
||
print_name([FirstLetter | RestOfName]) ->
|
||
io:format("~c~n", [FirstLetter]),
|
||
print_name(RestOfName).
|
||
```
|
||
|
||
输出:
|
||
```
|
||
> name:print_name("Mike").
|
||
M
|
||
i
|
||
k
|
||
e
|
||
ok
|
||
```
|
||
|
||
还特别强调**模式匹配** ,这通常消除了对`if`结构或`case`语句的需要。在以下示例中,特定名称有两个匹配项,后跟任何其他名称的catch-all。
|
||
|
||
```erlang
|
||
-module(greeting).
|
||
|
||
-export([say_hello/1]).
|
||
|
||
say_hello("Mary") ->
|
||
"Welcome back Mary!";
|
||
say_hello("Tom") ->
|
||
"Howdy Tom.";
|
||
say_hello(Name) ->
|
||
"Hello " ++ Name ++ ".".
|
||
```
|
||
|
||
输出:
|
||
```
|
||
> greeting:say_hello("Mary").
|
||
"Welcome back Mary!"
|
||
> greeting:say_hello("Tom").
|
||
"Howdy Tom."
|
||
> greeting:say_hello("Beth").
|
||
"Hello Beth."
|
||
```
|
||
|
||
### 试试看
|
||
|
||
有些网站可以尝试运行Erlang命令而无需在本地安装任何东西,例如:
|
||
|
||
* [试试看! (动手教程)](http://www.tryerlang.org/)
|
||
* [TutorialsPoint CodingGround](https://www.tutorialspoint.com/compile_erlang_online.php)
|
||
|
||
如果您想在您的(或虚拟)计算机上安装它,可以在[Erlang.org](https://www.erlang.org/downloads)或[Erlang Solutions](https://www.erlang-solutions.com/resources/download.html)上找到安装文件。
|
||
|
||
#### 更多信息:
|
||
|
||
* [关于Erlang](https://www.erlang.org/about)
|
||
* [向大家学习一些Erlang吧!](http://learnyousomeerlang.com/)
|
||
* [产卵避难所!](http://spawnedshelter.com/) _(用于学习Erlang的文章,视频和书籍的集合)_
|
||
* [Erlang(编程语言)](https://en.wikipedia.org/wiki/Erlang_(programming_language)) |