List SML-列表中的最后一个

List SML-列表中的最后一个,list,sml,List,Sml,我想要SML列表中的最后一个值 例如,1::2::3=>3 我试着用“last”,但没用 我试图实现它,如下所示: val rec last = fn (h::list) => last (list) | (h::nil) => h | (nil) => nil; 但这给了我一个问题:匹配冗余 谢谢您的帮助。我怀疑(h::nil)的情况是多余的,因为它是(h::list)的特例。我认为您应该重新安排您的比赛案例: exception

我想要SML列表中的最后一个值

例如,
1::2::3=>3

我试着用“last”,但没用

我试图实现它,如下所示:

val rec last =
    fn (h::list) => last (list)
       | (h::nil) => h
       | (nil) => nil;
但这给了我一个问题:匹配冗余


谢谢您的帮助。

我怀疑
(h::nil)
的情况是多余的,因为它是
(h::list)
的特例。我认为您应该重新安排您的比赛案例:

    exception Empty
    val rec last =
        fn (h::nil) => h
           |(h::list) => last (list)
           | (nil) => raise Empty;

顺便说一下,
List.last
应该可以使用,因为它是SML Basis库的一部分。

也可以这么简单:

exception Empty
fun lastinList [] = raise Empty
| lastinList l = hd(rev(l));

谢谢,但没用。它说操作符域应该得到'z list,但我给了他int list。这是因为当输入列表为nil时,您没有任何要返回的内容。我已经更新了代码,当列表为空时会引发异常。
list
是SML Basis库的一部分,而不仅仅是SML/NJ为什么要对
[]
进行特殊处理
fun last xs=hd(rev xs)
也一样好。很明显,空列表中没有最后一项,这就是为什么我认为如果列表为空,应该引发错误的原因。但是正如你所说的,减少的代码同样好。