Haskell 太多 where 子句,任何替代建议

标签 haskell functional-programming

我是 Haskell 的新手,在编写小程序时,我通常会使用太多的 where 子句来检查函数中的许多内容,因此编写 where 子句是一种很好的做法,或者还有其他好的替代方法吗?

例如,在下面的代码中,我试图查找二维列表的每一行中是否有 ant 重复元素,它可以工作,并且每件事都是同一函数中的内容,但我对代码的外观不满意,我发现它更重要解决问题的方式,所以我正在从那里有经验的人那里寻找任何建议或想法。

noDups :: [[a]] -> Bool
noDups du = and (checkSu du)
       where
       checkDup []     = []
       checkDup (x:xs) = checkRow x ++ checkDup xs
             where
             checkRow []     = [] 
             checkRow (x:xs) = [x /= y | y <- xs] ++ checkRow xs

再一次,这段代码只是为了说明一个问题,我正在寻找以函数式风格表达问题的方法。您的建议或文章,链接会很有帮助。

谢谢

最佳答案

尝试编写抽象的、可重用的函数
您将能够更轻松地编写它们

isUnique :: Eq a => [a] -> Bool
isUnique [] = True
isUnique (x:xs) = all (/= x) xs && isUnique xs

noDups :: Eq a => [[a]] -> Bool
noDups = all isUnique

关于Haskell 太多 where 子句,任何替代建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1779551/

相关文章:

functional-programming - Erlang追踪: Causal consistency?

clojure - 根据 clojure 中的映射值拆分映射集合

haskell - Reactive 的 Monad 实例如何处理同时发生的事件?

haskell - 在 aeson 的解析器中收集对象的所有未使用字段的更好方法?

haskell - Agda 类型检查和交换性/+ 的关联性

types - 是否可以在 F# 中使用本地类型

c++ - 返工 for 循环 STL 容器以使用功能技术

haskell - SML 到 Haskell 的转换

haskell - cabal 可以警告依赖项中未使用的包吗?

haskell - Haskell PrettyPrinter 中的空(零高度)文档