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