我是 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/