对于子句的顺序不重要的函数,它是最后的基本情况:
all(Pred, [Head|Tail]) ->
case Pred(Head) of
true -> all(Pred, Tail);
false -> false
end;
all(Pred, []) when is_function(Pred, 1) -> true.
Run Code Online (Sandbox Code Playgroud)
或者基础案例:
all(Pred, []) when is_function(Pred, 1) -> true;
all(Pred, [Head|Tail]) ->
case Pred(Head) of
true -> all(Pred, Tail);
false -> false
end.
Run Code Online (Sandbox Code Playgroud)
从查看标准库中的源代码看,该约定似乎是最后的基础案例.这是首选的风格吗?它是有原因的,还是只是它的方式?
只有第二种情况才有效,因为案例按顺序匹配.
由于整数0能够匹配模式N,因此如果它出现,则永远不会达到常数0子句.
这是模式匹配的有序方面,在编写函数子句,case子句或任何其他此类潜在匹配序列时,您应该考虑这些方面.
| 归档时间: |
|
| 查看次数: |
269 次 |
| 最近记录: |