首页 > 解决方案 > 功能安全尾中的非详尽模式

问题描述

我的代码有什么问题?

safetail (x:xs)= if null []==True then  xs else  error "Empty"

当我运行我的代码时,它向我显示了一个异常:

Input safetail []
*** Exception: safetail.hs:1:1-62: Non-exhaustive patterns in function safetail

标签: haskell

解决方案


您需要使用两种情况;模式匹配甚至阻止您的函数在空列表上被调用(成功)。

safetail [] = error "Empty"
safetail (_:xs) = xs

也就是说,对于名称中带有“安全”的函数会引发运行时异常,这具有一定的讽刺意味。要么返回一个空列表

safetail :: [a] -> [a]
safetail [] = []
safetail (_:xs) = xs

或更改您的函数类型以使其总计。例如,

safetail :: [a] -> Maybe [a]
safetail [] = Nothing
safetail (_:xs) = Just xs

推荐阅读