所有/ map函数中的Haskell问题

时间:2011-06-08 11:40:19

标签: haskell map

func::[Int]->Bool
func [] = False
func (l:ls) = ff1 (l)


ff1::Int->Bool
ff1 j = j > 0

目前此代码仅匹配第一个值。我尝试使用mapall但未获得好结果。

我的问题是我需要检查所有值是否与ff1模式匹配,以及所有ls list元素是否为真为false ,返回一个布尔值。

3 个答案:

答案 0 :(得分:4)

我认为你只需要all

Prelude> :t all
all :: (a -> Bool) -> [a] -> Bool
Prelude> all (>0) [-10..10]
False
Prelude> all (>0) [1..10]
True

或者,如果您愿意,您可以这样做:

Prelude> let f1 x = x > 5 && x < 10
Prelude> let func xs = all f1 xs
Prelude> func [6..9]
True
Prelude> func [1..10]
False

允许您创建函数f1以执行复杂检查。无论如何,您可以all

使用func

答案 1 :(得分:3)

这应该有效:

func ls = all ff1 ls

或者这个:

func ls = and (map ff1 ls)

答案 2 :(得分:0)

也许是这样的 - 假设您希望在所有Bool结果之间执行“和”。

func::[Int]->Bool
func [] = True
func (l:ls) = ff1 (l) && func (ls)

ff1::Int->Bool
ff1 j = j > 0

main = do let a = func [-1, -2, 1, 2, 3]
          print a