当function
和match
语句中的子句不相互排斥时,顺序显然很重要。但是,当子句互斥时,它们可以按任何顺序编写。例如,要找到列表中的最小元素,以下在功能上是等效的:
let rec minElt =
function
| [] -> failwith "empty list"
| [x0] -> x0
| x0::xtl -> min x0 (minElt xtl)
let rec minElt =
function
| [x0] -> x0
| x0::xtl -> min x0 (minElt xtl)
| [] -> failwith "empty list"
我在风格上更喜欢第一个,因为这些图案是按尺寸递增的顺序列出的/基本情况排在第一位。但是,第二个有什么优势吗?特别是,第二个是否更有效,因为在正常评估过程中永远不会检查异常情况?