<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hant-TW">
	<id>https://wiki.taigi.ima.org.tw/w/index.php?action=history&amp;feed=atom&amp;title=Erlang</id>
	<title>Erlang - 修訂紀錄</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.taigi.ima.org.tw/w/index.php?action=history&amp;feed=atom&amp;title=Erlang"/>
	<link rel="alternate" type="text/html" href="https://wiki.taigi.ima.org.tw/w/index.php?title=Erlang&amp;action=history"/>
	<updated>2026-04-06T22:00:14Z</updated>
	<subtitle>本 wiki 上此頁面的修訂紀錄</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://wiki.taigi.ima.org.tw/w/index.php?title=Erlang&amp;diff=436557&amp;oldid=prev</id>
		<title>TaiwanTonguesApiRobot：​從 JSON 檔案批量匯入</title>
		<link rel="alternate" type="text/html" href="https://wiki.taigi.ima.org.tw/w/index.php?title=Erlang&amp;diff=436557&amp;oldid=prev"/>
		<updated>2025-08-22T21:23:17Z</updated>

		<summary type="html">&lt;p&gt;從 JSON 檔案批量匯入&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新頁面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Erlang&amp;#039;&amp;#039;&amp;#039;（/ ˈɜːrlæŋ /）是一種通用的平行導向函數式程式語言。Erlang 嘛會當指 Erlang / OTP 的通稱，開源電信平台（OTP）是 Erlang 的常用執行環境佮一系列標準元件。&lt;br /&gt;
&lt;br /&gt;
Erlang 執行環境為專有以下要求的系統設計：&lt;br /&gt;
&lt;br /&gt;
* 散式運算&lt;br /&gt;
* 高故障容許度&lt;br /&gt;
* 軟性即時運算&lt;br /&gt;
* 懸可用性、直直做出來的應用&lt;br /&gt;
* 熱插拔，會當修改程式而免停機&lt;br /&gt;
&lt;br /&gt;
Erlang 是運作佇虛擬機的直譯式語言，但是這馬嘛包含有烏普薩拉大學高效能 Erlang 計畫（HiPE）開發的原生程式碼編譯器，自 R 十一 B 枋仔四版本開始，Erlang 嘛支援跤本直譯器。佇咧編程範型上，Erlang 是屬於多重典範程式語言，涵蓋函數式、平行式佮分散式。循序執行的 Erlang 是一个古早求值，單次才閣動態資料形態的函數式程式語言。&lt;br /&gt;
&lt;br /&gt;
伊由喬 ・ 阿姆斯特朗（Joe Armstrong）佇瑞典電信裝置製造商愛立信所轄的電腦科學研究室開發，目的是創造一種會當應付大規模閣發活動的程式語言佮執行環境。Erlang 佇一九八七年釋出正式的版本，上早是愛立信擁有的私有軟體，經過十冬的發展，佇一九九八年發表開放原始碼版本。&lt;br /&gt;
&lt;br /&gt;
==開發佮演變歷史==&lt;br /&gt;
&lt;br /&gt;
Erlang 著名佇丹麥數學家佮統計學家 Agner Krarup _ Erlang _，同時 Erlang 閣會當表示 _ Er _ icsson _ Lang _ uage。Erlang 語言由瑞典愛立信電信公司的喬 ・ 阿姆斯特朗開始設計，開始公元一九八空年代。頭仔是以 Prolog 程式語言做基礎，幾度改版了後，改做以 Joe&amp;#039;s Abstract Machine 為基礎的獨立語言執行環境。雖然語言的風格猶原和 Prolog 相倚，猶毋過咧乎 Erlang 語言設計的行向，Erlang 成做具備函式語言特色的程式語言。&lt;br /&gt;
&lt;br /&gt;
===發行版本===&lt;br /&gt;
&lt;br /&gt;
一九九八年起，Erlang 發佈開放原始碼版本，號做開源電信平台。&amp;#039;&amp;#039;&amp;#039;開源電信平台&amp;#039;&amp;#039;&amp;#039;採用修改過的 Mozilla 公共許可證協定來發放，同時愛立信猶閣提供商業版本的技術支援。目前，Erlang 上大的商業使用者是愛立信，其他有名的使用者有北電網路、亞瑪綴袂著 T-Mobile 等。&lt;br /&gt;
&lt;br /&gt;
===語言特色===&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;平行導向程式設計&amp;#039;&amp;#039;&amp;#039;佇語言內底，會當透過 spawn / \ * 函式，將特定的函式設定做獨立的行程，了後會使做跨行程通訊。&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;函數式程式設計&amp;#039;&amp;#039;&amp;#039;因為 Erlang 早期以 Prolog 開發製作，受著語言特性影響，就成做函數式的語言。&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;單次才值&amp;#039;&amp;#039;&amp;#039;逐个變數干焦會當佮資料縛一改，所以乎，無親像講一般程式語言的變數會當多次指定為無仝的值。單次才值的好處是狀態單純，使程式會當閱讀。&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;佮早求值抑是嚴格求值&amp;#039;&amp;#039;&amp;#039;Erlang 基本求值策略為電腦語言內底佮早求值之特性。而且，會當藉著明確來使用無參數的 λ 演算式，將特定函式設定做貧惰性求值策略。&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;動態資料型態佮類型系統&amp;#039;&amp;#039;&amp;#039;有編譯時期的型態檢查系統支援。&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;錯誤先發&amp;#039;&amp;#039;&amp;#039;佇執行時期發生的錯誤，會由錯誤位置送出訊息，發生錯誤的行程隨停止動作。藉由行程鏈通機制，會當自動傳遞錯誤、掠毋著，使其他行程會使幫助處理錯誤。&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;程式碼熱更新&amp;#039;&amp;#039;&amp;#039;因為 Erlang 是函式的語言，會當編寫特定的程式結構，製作即時換新版函式的機制。&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;手稿語言&amp;#039;&amp;#039;&amp;#039;Erlang 實作提供了指令碼執行方式。&lt;br /&gt;
&lt;br /&gt;
==語言構成==&lt;br /&gt;
&lt;br /&gt;
Erlang 程式結構以函式定義做主。函式是一組將輸入分別對應到輸出的規則，對應方式遵守數學函式的慣例。此外，Erlang 語言由幾項構句要素所組成，包括文字 ( 抑是講原子 )、數字、列表、值組、字元、字捾、二進位資料、模組、佮特定用途的關鍵字如 fun . . . end , if . . . end , case . . . of . . . end , spawn ,   ! , receive . . . end 等咧。以下段落分別列示並舉例說明 Erlang 程式的基本構成部份，涵蓋&amp;#039;&amp;#039;&amp;#039;資料的格式&amp;#039;&amp;#039;&amp;#039;、&amp;#039;&amp;#039;&amp;#039;表達式格式&amp;#039;&amp;#039;&amp;#039;佮&amp;#039;&amp;#039;&amp;#039;內建函式&amp;#039;&amp;#039;&amp;#039;。&lt;br /&gt;
&lt;br /&gt;
===資料的格式===&lt;br /&gt;
&lt;br /&gt;
===表達式格式===&lt;br /&gt;
&lt;br /&gt;
===內建函式===&lt;br /&gt;
&lt;br /&gt;
開源電信平台包括一个 Erlang 直譯器、一个 Erlang 編譯器、程式節點通訊協定、CORBA、一个分散式的資料庫 Mnesia、猶閣有足濟程式庫。&amp;#039;&amp;#039;&amp;#039;內建函式&amp;#039;&amp;#039;&amp;#039;涵蓋各種方面的功能咧，涵蓋系統命令、資料的存取、格式轉換、網路通訊、圖形介面、. . . 等。以下列表介紹幾項常用的 Erlang 內建函式。( 參閱檔案抑是索引 )&lt;br /&gt;
&lt;br /&gt;
==Hello World 程式==&lt;br /&gt;
&lt;br /&gt;
這是輸出 Hello World 的一種方式：&lt;br /&gt;
&lt;br /&gt;
若欲編譯這个程式乎，為一个存在為一个 hello . erl 的文字檔，然後對 Erlang 終端進行編譯。毋通袂記得佇每一个命令的最後加上一个句號（.）。 比如講：&lt;br /&gt;
&lt;br /&gt;
` ` `&lt;br /&gt;
Erlang ( BEAM ) emulator version 四配九 . 一 [source]&lt;br /&gt;
Eshell V 四配九 . 一 ( abort with ^ G )&lt;br /&gt;
一 &amp;gt; c ( hello ) .&lt;br /&gt;
{ ok , hello }&lt;br /&gt;
` ` `&lt;br /&gt;
&lt;br /&gt;
（ 佇咧 Unix 系統上，你會當通過佇命令列內底輸入 &amp;quot; erl &amp;quot; 來進入 Erlang 終其尾。佇咧 Windows 系統上，你需要拍開一个命令提示符視窗，然後輸入 &amp;quot; werl &amp;quot; 來進入 Erlang 終其尾，抑是佇程式功能表內底揣著 Erlang 的圖示。）對 Erlang 終端上運行這个程式：&lt;br /&gt;
&lt;br /&gt;
` ` `&lt;br /&gt;
二 &amp;gt; hello : hello _ world ( ) .&lt;br /&gt;
hello , world&lt;br /&gt;
ok&lt;br /&gt;
` ` `&lt;br /&gt;
&lt;br /&gt;
==函數式程式設計==&lt;br /&gt;
&lt;br /&gt;
Erlang 支援函數式程式設計的一般特色，特色包括孤一改孤一改、遞迴定義、λ 演算來佮高階函式等等。Erlang 函式大致寫法這馬，以整數階乘模組做例：&lt;br /&gt;
&lt;br /&gt;
` ` `&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;-module&amp;#039;&amp;#039;&amp;#039;( fact ) .&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;-export&amp;#039;&amp;#039;&amp;#039;( [fac / 一] ) .&lt;br /&gt;
&lt;br /&gt;
fac ( N )&amp;#039;&amp;#039;&amp;#039;when&amp;#039;&amp;#039;&amp;#039;N &amp;gt; 一-&amp;gt;&lt;br /&gt;
N * fac ( N 影一 ) ;&lt;br /&gt;
fac ( 一 )-&amp;gt;&lt;br /&gt;
一 .&lt;br /&gt;
` ` `&lt;br /&gt;
&lt;br /&gt;
以下是快速排序演算法的 Erlang 實作：&lt;br /&gt;
&lt;br /&gt;
` ` `&lt;br /&gt;
_ % % quicksort : qsort ( List ) _&lt;br /&gt;
_ % % Sort a list of items _&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;-module&amp;#039;&amp;#039;&amp;#039;( quicksort ) .&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;-export&amp;#039;&amp;#039;&amp;#039;( [qsort / 一] ) .&lt;br /&gt;
&lt;br /&gt;
qsort ( [] )-&amp;gt; [] ;&lt;br /&gt;
qsort ( [Pivot | Rest] )-&amp;gt;&lt;br /&gt;
qsort ( [X | | X &amp;lt;-Rest , X=&amp;lt; Pivot] ) + + [Pivot] + + qsort ( [Y | | Y &amp;lt;-Rest , Y &amp;gt; Pivot] ) .&lt;br /&gt;
` ` `&lt;br /&gt;
&lt;br /&gt;
以下是費氏數列求解函式：&lt;br /&gt;
&lt;br /&gt;
` ` `&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;-module&amp;#039;&amp;#039;&amp;#039;( example ) .&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;-export&amp;#039;&amp;#039;&amp;#039;( [fibo / 一] ) .&lt;br /&gt;
&lt;br /&gt;
fibo ( N )&amp;#039;&amp;#039;&amp;#039;when&amp;#039;&amp;#039;&amp;#039;N &amp;gt; 一-&amp;gt;&lt;br /&gt;
fibo ( N 影一 ) + fibo ( N 鋪二 ) ;&lt;br /&gt;
fibo ( 一 )-&amp;gt;&lt;br /&gt;
一 ;&lt;br /&gt;
fibo ( 零 )-&amp;gt;&lt;br /&gt;
零 .&lt;br /&gt;
` ` `&lt;br /&gt;
&lt;br /&gt;
` ` `&lt;br /&gt;
&amp;gt; c ( example ) .&lt;br /&gt;
{ ok , example }&lt;br /&gt;
&amp;gt; lists : map ( fun ( X )-&amp;gt;&amp;#039;&amp;#039;&amp;#039;example : fibo&amp;#039;&amp;#039;&amp;#039;( X ) end , lists : seq ( 一 , 十 ) ) .&lt;br /&gt;
[一 , 一 , 二 , 三 , 五 , 八 , 十三 , 二十一 , 三十四 , 五十五]&lt;br /&gt;
` ` `&lt;br /&gt;
&lt;br /&gt;
函數式程式設計難免用遞迴計算，煞閣消磨大量遞迴疊空間。為著克服這个問題，一般使用&amp;#039;&amp;#039;&amp;#039;累積參數&amp;#039;&amp;#039;&amp;#039;佮&amp;#039;&amp;#039;&amp;#039;尾溜遞迴&amp;#039;&amp;#039;&amp;#039;等技巧節省遞迴數目：以下比如講以下。&lt;br /&gt;
&lt;br /&gt;
` ` `&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;-module&amp;#039;&amp;#039;&amp;#039;( test ) .&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;-export&amp;#039;&amp;#039;&amp;#039;( [fibo _ accu / 一] ) .&lt;br /&gt;
&lt;br /&gt;
fibo _ accu ( N )-&amp;gt;&lt;br /&gt;
fibo ( N , 零 , 一 ) .&lt;br /&gt;
fibo ( N , C 一 , C 二 )&amp;#039;&amp;#039;&amp;#039;when&amp;#039;&amp;#039;&amp;#039;N &amp;gt; 二-&amp;gt;&lt;br /&gt;
fibo ( N 影一 , C 二 , C 一 + C 二 ) ;&lt;br /&gt;
fibo ( 零 , _ , _ )-&amp;gt;&lt;br /&gt;
零 ;&lt;br /&gt;
fibo ( 一 , _ , _ )-&amp;gt;&lt;br /&gt;
一 ;&lt;br /&gt;
fibo ( _ , C 一 , C 二 )-&amp;gt;&lt;br /&gt;
C 一 + C 二 .&lt;br /&gt;
` ` `&lt;br /&gt;
&lt;br /&gt;
` ` `&lt;br /&gt;
&amp;gt; c ( example ) .&lt;br /&gt;
{ ok , test }&lt;br /&gt;
&amp;gt; lists : map ( fun ( X )-&amp;gt;&amp;#039;&amp;#039;&amp;#039;test : fibo \ _ accu&amp;#039;&amp;#039;&amp;#039;( X ) end , lists : seq ( 一 , 十 ) ) .&lt;br /&gt;
[一 , 一 , 二 , 三 , 五 , 八 , 十三 , 二十一 , 三十四 , 五十五]&lt;br /&gt;
` ` `&lt;br /&gt;
&lt;br /&gt;
函數式程式設計容許使用高階函式求解。比如講比如講 Erlang 實做複合函式。( f o g，唸作 f _ after _ g。)&lt;br /&gt;
&lt;br /&gt;
` ` `&lt;br /&gt;
&amp;#039;After&amp;#039;( F , G )-&amp;gt;&lt;br /&gt;
fun ( X )-&amp;gt;&lt;br /&gt;
erlang : apply ( F , [erlang : apply ( G , [ X] ) ] )&lt;br /&gt;
end .&lt;br /&gt;
` ` `&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: * 請注意&amp;#039;&amp;#039;&amp;#039;after&amp;#039;&amp;#039;&amp;#039;是 Erlang 關鍵字。所以，以上函式號名做 ′ _ After _ ′ 避開關鍵字。&lt;br /&gt;
&lt;br /&gt;
` ` `&lt;br /&gt;
&amp;gt; (&amp;#039;&amp;#039;&amp;#039;example :&amp;#039;After&amp;#039;&amp;#039;&amp;#039;&amp;#039;( fun test : show / 一 , fun test : parse / 一 ) ) ( 三-c一四一六 ) .&lt;br /&gt;
Real number 三-c一四一六空空 is met .&lt;br /&gt;
ok&lt;br /&gt;
` ` `&lt;br /&gt;
&lt;br /&gt;
==平行式程式設計==&lt;br /&gt;
&lt;br /&gt;
Erlang 上主要的特色是&amp;#039;&amp;#039;&amp;#039;平行導向程式設計&amp;#039;&amp;#039;&amp;#039;，強調濟程式平行運作，而且以訊息對彼此溝通。Erlang 提供矣&amp;#039;&amp;#039;&amp;#039;spawn&amp;#039;&amp;#039;&amp;#039;函式佮&amp;#039;&amp;#039;&amp;#039;!&amp;#039;&amp;#039;&amp;#039;、&amp;#039;&amp;#039;&amp;#039;receive&amp;#039;&amp;#039;&amp;#039;. . .&amp;#039;&amp;#039;&amp;#039;end&amp;#039;&amp;#039;&amp;#039;等等關鍵字，會當描述講是佇 Erlang / 開源電信平台中的按怎啟動一寡程式、並且欲按怎予程式傳遞訊息。此外，&amp;#039;&amp;#039;&amp;#039;平行導向程式設計&amp;#039;&amp;#039;&amp;#039;的精神閣強調程式的容錯處理，藉著程式發生錯誤時的訊息傳達，予其他程式會當知影毋著的發生，予方便於後續處理。以下分別介紹平行導向程式設計的一般程式編寫方式，閣有錯誤處理的使用方式。&lt;br /&gt;
&lt;br /&gt;
===平行導向程式設計===&lt;br /&gt;
&lt;br /&gt;
基本的平行程式示範如下：&lt;br /&gt;
&lt;br /&gt;
* 以下啟動一个程式。&lt;br /&gt;
&lt;br /&gt;
` ` `&lt;br /&gt;
_ % create process and call the function web : start \ _ server ( Port , MaxConnections ) _&lt;br /&gt;
ServerProcess=&amp;#039;&amp;#039;&amp;#039;spawn&amp;#039;&amp;#039;&amp;#039;( web , start _ server , [Port , MaxConnections] ) ,&lt;br /&gt;
` ` `&lt;br /&gt;
&lt;br /&gt;
* 以下是佇任何程式當中，對早前起動的程式送一个訊息 { _ pause _ , _ 十 _ }。&lt;br /&gt;
&lt;br /&gt;
` ` `&lt;br /&gt;
_ % send the { pause , 十 } message ( a tuple with an atom &amp;quot; pause &amp;quot; and a number &amp;quot; 十 &amp;quot; ) _&lt;br /&gt;
_ % to ServerProcess ( asynchronously ) _&lt;br /&gt;
ServerProcess  ! { pause , 十 } ,&lt;br /&gt;
&lt;br /&gt;
` ` `&lt;br /&gt;
&lt;br /&gt;
* 以下是一段接收訊息的程式。逐个程式攏有一份電子信箱，有可以留收著的訊息；receive . . . end 程式片斷是對程式的電子信箱當中取出上早佇留的訊息。&lt;br /&gt;
&lt;br /&gt;
` ` `&lt;br /&gt;
_ % receive messages sent to this process _&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;receive&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
a _ message-&amp;gt; do _ something ;&lt;br /&gt;
{ data , DataContent }-&amp;gt; handle ( DataContent ) ;&lt;br /&gt;
{ hello , Text }-&amp;gt; io : format ( &amp;quot; Got hello message : ~ s &amp;quot; , [Text] ) ;&lt;br /&gt;
{ goodbye , Text }-&amp;gt; io : format ( &amp;quot; Got goodbye message : ~ s &amp;quot; , [Text] )&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;end&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
收著_ a \ _ message _ 結果就是 _ do \ _ something _；收著 { _ data _ , _ DataContent _ } 結果會呼叫 handle ( DataContent )；&lt;br /&gt;
收著 { _ hello _ , _ Text _ } 結果教是印出 &amp;quot; Got hello message : . . . &amp;quot;，收著 { _ goodbye _ , _ Text _ } 結果印出&lt;br /&gt;
&amp;quot; Got goodbye message : . . . &amp;quot;。&lt;br /&gt;
` ` `&lt;br /&gt;
&lt;br /&gt;
以下程式，示範產生一組環狀傳遞訊息的程式。&lt;br /&gt;
&lt;br /&gt;
` ` `&lt;br /&gt;
ring _ proc ( Funs )-&amp;gt;&lt;br /&gt;
Ns=lists : seq ( 一 , length ( Funs ) ) ,&lt;br /&gt;
[P | Pids]=[&amp;#039;&amp;#039;&amp;#039;spawn&amp;#039;&amp;#039;&amp;#039;( _ ? MODULE _ , lists : nth ( Nth , Funs ) , [] ) | | Nth &amp;lt;-Ns] ,&lt;br /&gt;
[Pid  ! ToPid | | { Pid , ToPid } &amp;lt;-lists : zip ( [ P | Pids] , Pids + + [P] ) ] .&lt;br /&gt;
&lt;br /&gt;
func ( )-&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;receive&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
ToPid-&amp;gt;&lt;br /&gt;
func _ msg _ ( ToPid )&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;end&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
func _ msg _ ( ToPid )-&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;receive&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
stop-&amp;gt;&lt;br /&gt;
io : format ( &amp;quot; Stop process ~ w ~ n &amp;quot; , [self ( )] ) ,&lt;br /&gt;
ToPid  ! stop ;&lt;br /&gt;
Message-&amp;gt;&lt;br /&gt;
io : format ( &amp;quot; ~ w : transmit message to ~ w ~ n &amp;quot; , [self ( ) , ToPid] ) ,&lt;br /&gt;
ToPid  ! Message ,&lt;br /&gt;
func _ msg _ ( ToPid )&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;end&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
接收 _ stop _ 訊息，就對後一个程序送 _ stop _ 訊息；接收著其他任何的訊息，就對後一个程序送仝款的訊息。&lt;br /&gt;
` ` `&lt;br /&gt;
&lt;br /&gt;
若是傳送任何其他的訊息，就會予所有的程式不斷對後一个程式傳遞訊息。以下是咧測試傳送 _ stop _ 訊息的執行結果。&lt;br /&gt;
&lt;br /&gt;
` ` `&lt;br /&gt;
&amp;gt; [&amp;#039;&amp;#039;&amp;#039;P&amp;#039;&amp;#039;&amp;#039;| _ ]=&amp;#039;&amp;#039;&amp;#039;example : ring \ _ proc&amp;#039;&amp;#039;&amp;#039;( [func , func , func] ) .&lt;br /&gt;
[&amp;lt; 空九二三三 . 零 &amp;gt; , &amp;lt; 空九二三四 . 零 &amp;gt; , &amp;lt; 空九二三二 . 零 &amp;gt;]&lt;br /&gt;
&amp;gt;&amp;#039;&amp;#039;&amp;#039;P  ! stop .&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Stop process &amp;lt; 空九二三三 . 零 &amp;gt;&lt;br /&gt;
stop&lt;br /&gt;
Stop process &amp;lt; 空九二三四 . 零 &amp;gt;&lt;br /&gt;
&amp;gt; Stop process &amp;lt; 空九二三二 . 零 &amp;gt;&lt;br /&gt;
&amp;gt;&lt;br /&gt;
` ` `&lt;br /&gt;
&lt;br /&gt;
===容錯處理===&lt;br /&gt;
&lt;br /&gt;
Erlang 容錯處理機制，由兩步驟現：一是共兩个程式連接起來，二者之間存在一道通訊的管道，會當提供錯誤訊息的傳達 ─ ─ 在此使用&amp;#039;&amp;#039;&amp;#039;link&amp;#039;&amp;#039;&amp;#039;/&amp;#039;&amp;#039;&amp;#039;一&amp;#039;&amp;#039;&amp;#039;函式；二是將程式回報錯誤的機制拍開 ─ ─ 在此使用&amp;#039;&amp;#039;&amp;#039;process \ _ flag&amp;#039;&amp;#039;&amp;#039;/&amp;#039;&amp;#039;&amp;#039;二&amp;#039;&amp;#039;&amp;#039;函式。&lt;br /&gt;
&lt;br /&gt;
* 使用 link ( _ Pid _ ) 予程式連接到另外一个程式。&lt;br /&gt;
&lt;br /&gt;
` ` `&lt;br /&gt;
-&amp;#039;&amp;#039;&amp;#039;module&amp;#039;&amp;#039;&amp;#039;( example ) .&lt;br /&gt;
-&amp;#039;&amp;#039;&amp;#039;compile&amp;#039;&amp;#039;&amp;#039;( export _ all ) .&lt;br /&gt;
hello ( )-&amp;gt;&lt;br /&gt;
_ Pid _=spawn ( ? MODULE , world , [ ] ) ,&lt;br /&gt;
link ( _ Pid _ ) ,&lt;br /&gt;
. . . .&lt;br /&gt;
&lt;br /&gt;
執行的時，以 Pid=&amp;#039;&amp;#039;&amp;#039;spawn&amp;#039;&amp;#039;&amp;#039;( _ example _ , _ hello _ , [ ] ) 起動的程序，這个程序共啟動另外一个程序，並且佮伊連接。&lt;br /&gt;
` ` `&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: 毋過以上程式閣袂有錯誤訊息的傳達機制，因為回報錯誤的開關猶未拍開。&lt;br /&gt;
&lt;br /&gt;
* 開啟程式回報錯誤機制。&lt;br /&gt;
&lt;br /&gt;
` ` `&lt;br /&gt;
以上 hello / 空函數頭前段使用&amp;#039;&amp;#039;&amp;#039;process \ _ flag&amp;#039;&amp;#039;&amp;#039;/&amp;#039;&amp;#039;&amp;#039;二&amp;#039;&amp;#039;&amp;#039;函數，將 _ trap \ _ exit _ 標籤拍開，就會當趕緊開啟程序回報錯誤機制。&lt;br /&gt;
` ` `&lt;br /&gt;
&lt;br /&gt;
` ` `&lt;br /&gt;
hello ( )-&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;process \ _ flag&amp;#039;&amp;#039;&amp;#039;( _ trap \ _ exit _ , _ true _ ) ,&lt;br /&gt;
Pid=spawn ( ? MODULE , world , [ ] ) ,&lt;br /&gt;
link ( Pid ) ,&lt;br /&gt;
. . . .&lt;br /&gt;
` ` `&lt;br /&gt;
&lt;br /&gt;
所以，當程式結束的時陣，會送出 {&amp;#039;EXIT&amp;#039;, _ From _ , _ Reason _ } 資料。程式正常結束的時陣，_ Reason _ 為 _ normal _。&lt;br /&gt;
&lt;br /&gt;
另外咧，&amp;#039;&amp;#039;&amp;#039;spawn&amp;#039;&amp;#039;&amp;#039;函式另外有程式連接版本，&amp;#039;&amp;#039;&amp;#039;spawn \ _ link&amp;#039;&amp;#039;&amp;#039;函式，同時啟動閣連接著新的程式。&lt;br /&gt;
&lt;br /&gt;
==分散式程式設計==&lt;br /&gt;
&lt;br /&gt;
Erlang 提供分散式的機制，會當佇另外一台電腦啟動一寡 Erlang 程式，閣由本機電腦著其他電腦的 Erlang 程式傳遞訊息。&lt;br /&gt;
&lt;br /&gt;
* 當啟動 Erlang 環境的時，加上一个網路節點名講，就進入分散式 Erlang 模式。節點會當使用埠號佮其他節點通訊。&lt;br /&gt;
&lt;br /&gt;
` ` `&lt;br /&gt;
$ &amp;gt;&amp;#039;&amp;#039;&amp;#039;erl&amp;#039;&amp;#039;&amp;#039;-name node _ 一&lt;br /&gt;
` ` `&lt;br /&gt;
&lt;br /&gt;
* 佇仝一个網仔內底，網路節點名會當使用短名。&lt;br /&gt;
&lt;br /&gt;
` ` `&lt;br /&gt;
$ &amp;gt;&amp;#039;&amp;#039;&amp;#039;erl&amp;#039;&amp;#039;&amp;#039;-sname node _ 一&lt;br /&gt;
` ` `&lt;br /&gt;
&lt;br /&gt;
啟動新的網路節點鐘，Erlang 使用&amp;#039;&amp;#039;&amp;#039;epmd&amp;#039;&amp;#039;&amp;#039;( Erlang 埠號對應管理系統 ) 指派埠號，提供節點來使用。&lt;br /&gt;
&lt;br /&gt;
當知影講一个網路節點名的時陣，會當佇這个節點產生新的程式。&lt;br /&gt;
&lt;br /&gt;
* 咧指定節點 _ RemoteNode _ 啟動一个程式，&amp;#039;&amp;#039;&amp;#039;spawn&amp;#039;&amp;#039;&amp;#039;啟動參數依序做節點名、模組名稱、函式名稱、函式的參數列。&lt;br /&gt;
&lt;br /&gt;
` ` `&lt;br /&gt;
_ % create a remote process and call the function web : start \ _ server ( Port , MaxConnections ) _&lt;br /&gt;
_ % on machine RemoteNode _&lt;br /&gt;
RemoteProcess=&amp;#039;&amp;#039;&amp;#039;spawn&amp;#039;&amp;#039;&amp;#039;( _ RemoteNode _ , web , start _ server , [Port , MaxConnections] ) ,&lt;br /&gt;
&lt;br /&gt;
佇遠端節點產生新程序了後，會當使用平行式程式設計的技巧，佮遠端的程序通訊。&lt;br /&gt;
` ` `&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Erlang / 開源電信平台&amp;#039;&amp;#039;&amp;#039;提供的程式庫，佇分散式程式設計會當使用 _ net \ _ adm _、_ net \ _ kernel _、_ slave _、. . . 等模組，做網路通訊。&lt;br /&gt;
&lt;br /&gt;
==其他程式設計典範==&lt;br /&gt;
&lt;br /&gt;
===慢性求值===&lt;br /&gt;
&lt;br /&gt;
Erlang 程式員會當使用伊慢性求值。猶毋過，著愛使用 λ 演算式，才會當做伊的貧惰性求值。&lt;br /&gt;
&lt;br /&gt;
` ` `&lt;br /&gt;
以下是慢性求值的一例：準講有一个剖析的器程式通好，因為較早求值特徵，本程式會求解。&lt;br /&gt;
expr ( )-&amp;gt; alt ( then ( factor ( ) , then ( literal ( $ + ) , factor ( ) ) ) ,&lt;br /&gt;
then ( factor ( ) , then ( literal ( $-) , factor ( ) ) ) ) .&lt;br /&gt;
factor ( )-&amp;gt; alt ( then ( term ( ) , then ( literal ( $ * ) , term ( ) ) ) ,&lt;br /&gt;
then ( term ( ) , then ( literal ( $ / ) , term ( ) ) ) ) .&lt;br /&gt;
term ( )-&amp;gt; alt ( number ( ) ,&lt;br /&gt;
xthen ( literal ( $ ( ) , thenx ( expr ( ) , literal ( $ ) ) ) ) ) .&lt;br /&gt;
此使用 λ 演算式佮適當使用函數名稱表示，就會當進行求值。示比如講下底。&lt;br /&gt;
expr ( )-&amp;gt;&lt;br /&gt;
fun ( )-&amp;gt;&lt;br /&gt;
alt ( then ( fun factor / 零 , then ( literal ( $ + ) , fun factor / 零 ) ) ,&lt;br /&gt;
then ( fun factor / 零 , then ( literal ( $-) , fun factor / 零 ) ) )&lt;br /&gt;
end .&lt;br /&gt;
factor ( )-&amp;gt;&lt;br /&gt;
fun ( )-&amp;gt;&lt;br /&gt;
alt ( then ( fun term / 零 , then ( literal ( $ * ) , fun term / 零 ) ) ,&lt;br /&gt;
then ( fun term / 零 , then ( literal ( $ / ) , fun term / 零 ) ) )&lt;br /&gt;
end .&lt;br /&gt;
term ( )-&amp;gt;&lt;br /&gt;
fun ( )-&amp;gt;&lt;br /&gt;
alt ( number ( ) ,&lt;br /&gt;
xthen ( literal ( $ ( ) , thenx ( expr ( ) , literal ( $ ) ) ) ) )&lt;br /&gt;
end .&lt;br /&gt;
` ` `&lt;br /&gt;
&lt;br /&gt;
==應用==&lt;br /&gt;
&lt;br /&gt;
* Wings 三 D，一用 Erlang 編寫的三維計算機圖形軟體。&lt;br /&gt;
* YAWS，以 Erlang 編寫的高效 HTTP 侍服器。&lt;br /&gt;
* DISCO，以 Erlang 編寫的 MapReduce 架構系統。&lt;br /&gt;
* Apache CouchDB，以 Erlang 編寫的 MapReduce 檔案式的資料庫系統。&lt;br /&gt;
* RabbitMQ，會當配搭 Erlang 運作的訊息佇咧列系統。&lt;br /&gt;
* 開放電信平台&lt;br /&gt;
* WhatsApp：其後捀服器應用使用矣&amp;#039;&amp;#039;&amp;#039;Erlang&amp;#039;&amp;#039;&amp;#039;佮 FreeBSD。支援矣四配五億的活跳使用者&lt;br /&gt;
* ejabberd , 世界上時行的 XMPP 即時通訊侍服器&lt;br /&gt;
* EMQX，以 Erlang 編寫的懸可用、散式 MQTT 訊息侍服器。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==社群==&lt;br /&gt;
&lt;br /&gt;
* Erlang Central（英文）&lt;br /&gt;
* Erlang Resources 豆瓣小站（簡體中文）&lt;br /&gt;
* Erlang 中文社區 erlang-china . org（簡體中文）&lt;br /&gt;
* Erlang 中文教程 erlang-cn . com（簡體中文）&lt;br /&gt;
* Erlang 中文社群 cnerlang . com（簡體中文）&lt;br /&gt;
* Erlang 中文 erlang-cn . org（簡體中文）&lt;br /&gt;
&lt;br /&gt;
==參考資料==&lt;br /&gt;
&lt;br /&gt;
==延伸閱讀==&lt;br /&gt;
&lt;br /&gt;
==外部連結==&lt;br /&gt;
&lt;br /&gt;
* Erlang 開放原始碼版本（英文）&lt;br /&gt;
* Erlang 愛立信授權版本（英文）&lt;br /&gt;
* 因應軟體錯誤建構會當靠的分散式系統（英文）&lt;br /&gt;
* 開放式 kha-tá-lok-guh 計畫中和 Erlang 相關的內容&lt;br /&gt;
* Erlang 教學&lt;br /&gt;
&lt;br /&gt;
[[分類: 待校正]]&lt;/div&gt;</summary>
		<author><name>TaiwanTonguesApiRobot</name></author>
	</entry>
</feed>