我想要SML列表中的最后一个值。SML - 列表中的最后一个
例如,1::2::3 => 3
我尝试使用 “最后一次”,但没有奏效。
我试图实现它,就像这样:
val rec last =
fn (h::list) => last (list)
| (h::nil) => h
| (nil) => nil;
但它给我的问题:匹配冗余。
谢谢你的帮助。
我想要SML列表中的最后一个值。SML - 列表中的最后一个
例如,1::2::3 => 3
我尝试使用 “最后一次”,但没有奏效。
我试图实现它,就像这样:
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基本库的一部分。
也可以做到一样容易为:
exception Empty
fun lastinList [] = raise Empty
| lastinList l = hd(rev(l));
为什么要特殊处理'[]'? '最后一次xs = hd(rev xs)'就是一样好。 – 2012-02-29 21:54:50
显然,在空列表中没有最后一项,这就是为什么我认为如果列表为空,应该引发错误。但正如你所说,简化代码同样好。 – Bernd 2012-03-03 23:30:15
问题是,在这种情况下,'hd'会提高Empty。 ;) – 2012-03-04 18:46:39
谢谢你,但它没有工作。它说运营商域应该得到'z list list,但我给他int列表。 – Tom 2011-05-29 19:55:08
发生这种情况是因为当输入列表为零时没有任何返回。我已更新列表为空时引发异常的代码。 – pad 2011-05-29 20:07:35
'List'是SML Basis Library的一部分,不仅仅是SML/NJ – newacct 2011-08-30 21:59:41