func::[Int]->Bool
func [] = False
func (l:ls) = ff1 (l)
ff1::Int->Bool
ff1 j = j > 0
目前此代码仅匹配第一个值。我尝试使用map
和all
但未获得好结果。
我的问题是我需要检查所有值是否与ff1
模式匹配,以及所有ls list
元素是否为真或为false ,返回一个布尔值。
答案 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