Recursion 标准ML:获取列表中的最后一个
我试图在SML中获取整数列表的最后一个元素,但我想(以某种方式)指出用户何时传入不可接受的列表(例如空列表)。我的代码在这里:Recursion 标准ML:获取列表中的最后一个,recursion,sml,Recursion,Sml,我试图在SML中获取整数列表的最后一个元素,但我想(以某种方式)指出用户何时传入不可接受的列表(例如空列表)。我的代码在这里: fun lastInList [] = ~1 | lastInList [x] = x | lastInList (x::xs) = lastInList xs; 这适用于任何非空列表,因为执行总是在第一行之前的第二行。然而,有没有一种惯用的方法可以处理所有整数?我想我想返回某种例外情况。当前的解决方案不是很好,因为-1可以在我的列表中(显然)
fun lastInList [] = ~1
| lastInList [x] = x
| lastInList (x::xs) =
lastInList xs;
这适用于任何非空列表,因为执行总是在第一行之前的第二行。然而,有没有一种惯用的方法可以处理所有整数?我想我想返回某种例外情况。当前的解决方案不是很好,因为-1可以在我的列表中(显然)
谢谢你的帮助,
b外行您可以随时:
另一个(请原谅这个双关语):
希望能有所帮助。您可以随时:
另一个(请原谅这个双关语):
希望这能有所帮助。惯用的方法是允许函数在无效输入时失败:
fun last [] = raise Empty
| last [x] = x
| last (_::xs) = last xs
或使用选项类型:
fun last' [] = NONE
| last' [x] = SOME x
| last' (_::xs) = last' xs
这也适用于任何通用列表,而不仅仅是INT的列表。惯用的方法可能是允许函数在无效输入时失败:
fun last [] = raise Empty
| last [x] = x
| last (_::xs) = last xs
或使用选项类型:
fun last' [] = NONE
| last' [x] = SOME x
| last' (_::xs) = last' xs
这也适用于任何通用列表,不仅适用于int。听起来您的问题不是如何获取列表中的最后一个元素,而是如何区分特定结果(本例中为空列表)和域中的任意数据元素(本例中为整数)。我建议重新表述您的问题以反映您的意图。听起来您的问题不是如何获取列表中的最后一个元素,而是如何区分特定结果(本例中为空列表)和域中的任意数据元素(本例中为整数)。我建议您重新表述您的问题,以反映您的意图。非详尽模式是非常不鼓励的。最好显式地引发异常。不鼓励使用非穷举模式。最好显式引发异常。要引发的惯用异常是预定义的
Empty
,其他列表函数也使用它。要引发的惯用异常是预定义的Empty
,其他列表函数也使用它。