erlang.org.cn Open in urlscan Pro
2606:4700:3032::6815:3d56  Public Scan

URL: https://erlang.org.cn/
Submission: On November 27 via api from US — Scanned from DE

Form analysis 1 forms found in the DOM

GET https://duckduckgo.com/

<form class="d-flex" role="search" method="get" action="https://duckduckgo.com/">
  <input type="hidden" name="sites" value="erlang.org">
  <input class="form-control me-2" id="searchfield" name="q" type="search" placeholder="Search erlang.org" aria-label="Search">
  <button class="btn btn-outline-primary" type="submit">搜索</button>
</form>

Text Content

 * 下载
 * 文档
 * 社区
 * 新闻
 * 博客
 * EEP
 * 关于

搜索

实用的函数式编程
用于并行世界

获取 Erlang/OTP 26

fact(0) -> 1;              %% Pattern matching for control-flow
fact(N) -> N * fact(N-1).  %% Recursion to create loops

> example:fact(10).        %% Interactive shell for fast iterations
3628800
> [{I, example:fact(I)} || I <- lists:seq(1,10)].
[{1, 1}, {2, 2}, {3, 6}, {4, 24}, {5, 120}, {6, 720},
 {7, 5040}, {8, 40320}, {9, 362880}, {10, 3628800}]


函数式编程

> Fruits = ["banana","monkey","jungle"].     %% Immutable variables
["banana","monkey","jungle"]
> lists:map(fun string:uppercase/1, Fruits). %% Map values using stdlib functions
["BANANA","MONKEY","JUNGLE"]
%% Fold over lists using custom functions
> lists:foldl(fun(Str, Cnt) -> string:length(Str) + Cnt end, 0, Fruits).
18



高阶函数

> Parent = self().                         %% Get own process id
<0.376.0>
> Child = spawn(fun() -> receive go -> Parent ! lists:seq(1,100) end end).
<0.930.0>
> Child ! go.                              %% Send message to child
go
> receive Reply -> Reply end.              %% Receive response from child
[1,2,3,4,5,6,7,8,9,10,11|...]


轻量级进程

-spec even(list(integer())) -> list(integer()).
even(Numbers) ->
  mapreduce(Numbers, fun(Number) -> Number rem 2 == 0 end).
mapreduce(Numbers, Function) ->
  Parent = self(),
  [spawn(fun() -> Parent ! {Number, Function(Number)} end) || Number <- Numbers],
  lists:flatten(
    [receive {Number, true} -> Number; _ -> [] end || Number <- Numbers]).


并行 map-reduce 查找偶数

上一个 下一个

%% Return factorial for N
fact(0) -> 1;
fact(N) -> N * fact(N-1).

> example:fact(10).
3628800


函数式编程

> Fruits = ["banana","monkey"].
["banana","monkey"]
> lists:map(
    fun string:uppercase/1,
    Fruits).
["BANANA","MONKEY"]


高阶函数

> Me = self().
<0.376.0>        %% Send msg using !
> spawn(fun() -> Me!lists:seq(1,10) end).
<0.930.0>
> receive Reply -> Reply end.
[1,2,3,4,5,6,7,8,9,10]


轻量级进程

-spec even(In) -> Out
  when In :: list(integer()),
       Out :: list(integer()).
even(Numbers) ->
  [Number || Number <- Numbers,
   Number rem 2 == 0].


查找偶数

上一个 下一个

什么是 ERLANG?

Erlang 是一种编程语言,用于构建对高可用性有要求的大规模可扩展软实时系统。它的一些应用领域包括电信、银行、电子商务、计算机电话和即时消息。Erlang
的运行时系统内置支持并发、分布式和容错。

Erlang 快速入门

什么是 OTP?

OTP 是 Erlang 库和设计原则的集合,提供中间件来开发这些系统。它包含自己的分布式数据库、与其他语言接口的应用程序、调试和发布处理工具。

OTP 入门

新闻

ERLANG/OTP 27.0 发布候选版本 2

2024 年 3 月 20 日,作者:Björn Gustavsson Erlang/OTP 27.0-rc2 是 OTP 27 的第二个发布候选版本

ERLANG/OTP 27.0 发布候选版本 1

2024 年 2 月 14 日,作者:Björn Gustavsson Erlang/OTP 27.0-rc1 是 OTP 27 的第一个发布候选版本

ERLANG/OTP 26.2 版本

2023 年 12 月 13 日,作者:Henrik Nord Erlang/OTP 26.2 是 OTP 26 的第二个维护补丁包,主要包含错误修复。

参与