Haskell函数检查两个列表之间的差异



我想写一个函数来检查两个列表是否是";几乎";相同的第一个参数d用于精度-元素之间的差值不得超过d

例如,nearlyEqual 0.5 [2,5] [2.5, 5.1]等于True,但nearlyEqual 0.1 [2,5] [2.5, 5.1]等于False

我写了这个,但它不起作用:

nearlyEqual :: Int -> [Int] -> [Int] -> Bool
nearlyEqual d xs ys = foldr(&&) True $ zipWith (x y -> abs(x-y)<=d)

我错过了什么?如有任何帮助,我们将不胜感激!

不确定这是否是拼写错误,但您没有将xsys传递给函数。

nearlyEqual d xs ys = foldr(&&) True $ zipWith (x y -> abs(x-y)<=d)

应该是

nearlyEqual d xs ys = foldr(&&) True $ zipWith (x y -> abs(x-y)<=d) xs ys

至少可以进行打字检查。

更清晰的实现将使用Foldable t => (a -> Bool) -> t a -> Bool类型的all和函数组合运算符(.):

nearlyEqual d xs ys = all ((<= d) . abs) $ zipWith (-) xs ys

其中,zipWith (-) xs ys是两个列表的元素差,并且all验证谓词(<= d) . abs对于该列表的所有元素的成立;谓词,给定一个自变量,将abs应用于它,然后将(<= d)应用于结果。

相关内容

  • 没有找到相关文章

最新更新