为什么是取一个总函数



take (-1) [] []

为什么更喜欢这个而不是部分函数,即错误?

是否存在利用此属性的用例?

> takedrop 类似于左子字符串和右子字符串函数,并且在实践中证明,对于那些不会因负或无效长度引发错误的人来说

,这很方便。

例如 - 填充函数:

pad :: Int -> String -> String
pad n str = (repeat (n - length str) ' ') ++ str

这是用另一个字符串填充的变体:

padWith :: String -> Int -> String -> String
padWith field n str = (take (n - length str) field) ++ str

将列表拆分为(最多)n块需要take总计:

chunks n [] = []
chunks n xs = take n xs : chunks n (drop n xs)

此外,当前定义确保

take n xs ++ drop n xs == xs

适用于任何nxs

可以说,我们应该同时拥有takeAtMosttakeAtLeast,后者是部分变体(或者返回Maybe)。

类似的关注也出现在zip,即使应用于长度不等的列表,这也是完全的。尽管如此,这在成语zip [1..] xs中经常被利用,该成语将列表中的每个元素与其自己的索引配对。

但请记住,我并不是说总函数总是首选函数。在许多编程任务中,与获得错误的结果并且不知道错误在哪里相比,获得揭示错误的异常是一种幸福。或者更糟糕的是,得到一个错误但合理的结果,甚至没有发现存在错误。

相关内容

  • 没有找到相关文章

最新更新