Haskell ,用foldr实现任意功能
Haskell ,implement any function with foldr
我正在尝试实现一个函数,当列表中至少有一个元素满足条件 (>5)
时,该函数给出 True
*Main> any (>5) [1..]
True
这是我正在运行的代码:
any1 f [] = True
any1 f (x:xs) = f x || any f xs
但是我想用foldr
实现,怎么办?
感谢您的帮助。
列表中的 foldr
模式基本上取代了:
foldr f z [x<sub>1</sub>, x<sub>2</sub>, …, x<sub>n</sub>]
与:
f x<sub>1</sub> (f x<sub>2</sub> (… (f x<sub>n</sub> z) …))
因此,它用 f
替换了“cons”构造函数 (:)
,用 z
替换了空列表 []
。
因此,您应该查看 any1 f
如何具有它映射到空列表的值,并定义一个函数 g
将元素 x[ 作为第一个参数=32=]i</sub>
和第二个元素 foldr g [x<sub>i+1</sub>, x<sub>i+2</sub>, …, x<sub>n</sub>]
:
any1 :: Foldable f => (a -> Bool) -> f a -> Bool
any1 f = foldr g …
where g … = …
需要填写的地方…
.
我正在尝试实现一个函数,当列表中至少有一个元素满足条件 (>5)
True
*Main> any (>5) [1..]
True
这是我正在运行的代码:
any1 f [] = True
any1 f (x:xs) = f x || any f xs
但是我想用foldr
实现,怎么办?
感谢您的帮助。
列表中的 foldr
模式基本上取代了:
foldr f z [x<sub>1</sub>, x<sub>2</sub>, …, x<sub>n</sub>]
与:
f x<sub>1</sub> (f x<sub>2</sub> (… (f x<sub>n</sub> z) …))
因此,它用 f
替换了“cons”构造函数 (:)
,用 z
替换了空列表 []
。
因此,您应该查看 any1 f
如何具有它映射到空列表的值,并定义一个函数 g
将元素 x[ 作为第一个参数=32=]i</sub>
和第二个元素 foldr g [x<sub>i+1</sub>, x<sub>i+2</sub>, …, x<sub>n</sub>]
:
any1 :: Foldable f => (a -> Bool) -> f a -> Bool
any1 f = foldr g …
where g … = …
需要填写的地方…
.