今天要來介紹模式比對.erlang承繼了Prolog的模式比對能力,
但在實做上略有差異;Prolog是人工智慧導向,所以會設法比對
所有符合的模式,而erlang找到第一個符合就返回.
我們來看看一個簡單的程式,面積計算功能.
-module(geometry).
-export([area/1]).
area({rectangle, Width, Hight}) ->
Width * Hight;
area({circle, R}) ->
3.14159 * R * R.
編譯及執行過程:
1> c(geometry).
{ok,geometry}
2> geometry:area({rectangle, 3, 4}).
12
4> geometry:area({circle, 3}).
28.274309999999996
--- 分隔線 ---
可以看到,命名為area/1的函式,有兩個,雖然都是傳入一個參數,
但是使用tuple來當參數,而依據tuple裡的第一個原子,分別寫
了兩個對應的計算方式.
有點同名異式的味道.
現在能夠體會出原子與Tuple在erlang的作用了吧.
另外注意一下,在erlang中,雖然寫了兩個 area開頭的,
實際上就是一個函式,只是有兩個條款,中間用 ; 隔開.
最後一個用 . 結束,代表整個函式定義完成.
erlang是函數式程式語言,或者叫函式式.
變數不能變,函數定義可以寫數個.
比較回歸到數學的方式,跟一般程式語言的作法不同.