使用带有清单haskell的后卫

时间:2018-10-06 18:26:16

标签: haskell functional-programming haskell-stack

所以我有一个函数

otherfunction :: Int -> Bool
otherfunction = True 

实施otherfunction无关紧要

function :: [Int] -> world -> world
function listOfInts World | [otherfunction x <- listOfInts] = world {alive = False}
                    | otherwise world

因此,如果otherfunction(x)中的任何listOfInts返回一个False,我希望它完成那个世界{alive is False},我该如何实现呢?我也许可以做False元素[otherfunction x <- listOfInts],在Haskell中有更好的方法吗?

感谢急需的帮助,我是函数编程的新手。

2 个答案:

答案 0 :(得分:4)

您可以使用此列表的world&&设置为all otherfunction,例如:

function :: [Int] -> World -> World
function listOfInts world = world {alive = alive world && allOther }
    where allOther = all otherfunction listOfInts

因此,从listOfInts中的一个具有元素i的那一刻起,otherfunction i返回Falseall otherfunction listOfInts将返回False,并且因此,我们改变了世界的alive

我们还可以使用条件表达式:

function :: [Int] -> World -> World
function listOfInts world | alive world && not allOther = world {alive = False }
                          | otherwise = world
    where allOther = all otherfunction listOfInts

我们还可以省略alive world支票。但这意味着,如果世界已经死了,我们可能会在列表中做很多事情,这不是必须的。

答案 1 :(得分:4)

您似乎正在寻找all

function :: [int] -> world -> world
function listOfInts world
  | all otherfunction listOfInts = world
  | otherwise                    = world {alive = false}