Haskell,使用文件夹实现任何功能

问题描述

当列表中的至少一个元素满足条件True时,我正在尝试引入一个给出(>5)函数

*Main> any (>5) [1..]
True

这是我的有效代码

any1 f [] = True
any1 f (x:xs) = f x || any f xs

但是我想用foldr来实现它,我该怎么做? 感谢您的帮助。

解决方法

列表上的foldr模式基本上替换为:

foldr f z [x1,x2,…,xn]

具有:

f x1 (f x2 (… (f xn z) …))

因此,它将“ cons”构造函数(:)替换为f,并将空列表[]替换为z

因此,您应该查看any1 f的值如何映射到空列表,并定义一个函数g,该函数将元素xi和第二个元素作为第一个参数foldr g [xi+1,xi+2,xn]的结果:

any1 :: Foldable f => (a -> Bool) -> f a -> Bool
any1 f = foldr g …
    where g … = …

您需要填写的地方。