我寫這樣會將名單xs
到(init xs, last xs)
像這樣一個Haskell函數:在Haskell
split xs = split' [] xs
where
split' acc (x:[]) = (reverse acc, x)
split' acc (x:xs) = split' (x:acc) xs
由於空列表不能以這種方式被分割,沒有匹配的空的清單。但是,我並不想簡單地將error ...
的功能。因此,我定義如下:
split [] = ([], undefined)
由於懶惰的評價因此,我可以定義一個安全init
它簡單的返回空列表爲空列表:
init' = fst . split
有沒有一些方法,我怎麼能檢測如果我試圖訪問它,這樣
last' xs
| isUndefined (snd xs) = ...
| otherwise = ...
我不知道Maybe
和Either
,而且未定義那些表達我想要的是更好的選擇。然而,我想知道是否有辦法檢測未定義的實際值,即捕獲錯誤(如捕獲異常)。
簡單的答案是NO。無法檢測到未定義的。 (更復雜的答案是,你可以在IO momad中捕獲異常,但這不是你想要在這裏做的。) – augustss 2012-02-22 10:42:35