Erlang 程式設計/函式
外觀
要檢視 Erlang 中的函式,我們可以建立名為 even_prime.erl 的檔案,其中包含以下程式碼。
-module(even_prime). % 1
-export([is_even_prime/1]). % 2
% 3
is_even_prime(2) -> % 4 clause 1 is simple
true; % 5
is_even_prime(N) when is_integer(N) -> % 6 clause 2 has a guard: is_integer(N)
false; % 7
is_even_prime(Any) -> % 8 clause 3 is simple
'I prefer integer inputs'. % 9
函式子句按檢查順序排列。首先檢查 is_even_prime(2) 是否匹配。如果引數匹配,則返回 true 。此子句以分號結尾,因為函式定義尚未完成。如果 is_even_prime(2) 未匹配,則嘗試 is_even_prime(N) 。 is_even_prime(N) 檢查是否匹配。N 是一個匹配任何整數的變數。語句 when is_integer 是一個 保護,它只允許整數型別進入 N。分號表示還有更多要進行。末尾的句號表示函式定義已完成。 is_even_prime(Any) 匹配任何型別的任何內容,並返回值 'I prefer integer inputs'. 函式現在已完成。此函式是一個全函式,應該涵蓋所有可能的單引數輸入。
輸出
2> c(even_prime).
./even_prime.erl:8: Warning: variable 'Any' is unused
{ok,even_prime}
3> even_prime:is_even_prime(2). true
4> even_prime:is_even_prime(1). false
5> even_prime:is_even_prime(seven). 'I prefer integer inputs'
==================================================================
Syntax/structure of a function:
==================================================================
semicolon - ends a clause
period - ends a function
when - starts a guard
arrow - separates the head from the tail of the function
function head - input part of function includes the signature and guard
function tail - output/consequence(s) part of function
signature - the function name and argument structure/count
==================================================================
rotate_list( [H|T] ) when is_atom(H) -> T ++ [H].
.
[----signature-----] [----guard----] .
.
[-----------function head----------] . [--function tail--]
==================================================================