跳转到内容

Erlang 编程/函数

来自维基教科书,开放的书籍,为开放的世界

← 表达式 | 保护 →

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--]
                           
==================================================================
华夏公益教科书