我想要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