我试图在SML中获取整数列表的最后一个元素但是我想(以某种方式)指示用户何时传入不可接受的列表(例如空列表)。我的代码在这里:
fun lastInList [] = ~1
| lastInList [x] = x
| lastInList (x::xs) =
lastInList xs;
这适用于任何非空列表,因为执行总是会在第一行之前到达第二行。但是,是否有一种能够处理所有整数的惯用方法?我想,我想回复某种例外。当前的解决方案并不是很好,因为-1可以在我的列表中(显然)。
感谢您的帮助, bclayman
答案 0 :(得分:3)
您可以随时raise an exception:
fun last [] = NONE
| last (x::xs) = SOME (last' x xs)
fun last' x [] = x
| last' _ (x::xs) = last' x xs
另一个option(如果你原谅双关语):
BEFORE
希望有所帮助。
答案 1 :(得分:2)
惯用的方法是让函数在无效输入上失败:
fun last [] = raise Empty
| last [x] = x
| last (_::xs) = last xs
或使用选项类型:
fun last' [] = NONE
| last' [x] = SOME x
| last' (_::xs) = last' xs
这也适用于任何通用列表,不仅适用于整数列表。