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--]
==================================================================