используя охрану со списком haskell - PullRequest
0 голосов
/ 06 октября 2018

Итак, у меня есть функция, которая принимает

otherfunction :: Int -> Bool
otherfunction = True 

Реализация otherfunction не имеет значения

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

, поэтому, если какой-либо из otherfunction(x) in listOfInts возвращаетa False Я хочу, чтобы это сделал этот мир {жив - Ложь}, как я могу это реализовать?Я могу, возможно, сделать False elem [otherfunction x <- listOfInts], есть ли лучший способ сделать это в Haskell.

Спасибо за столь необходимую помощь, я новичок в функциональном программировании.

Ответы [ 2 ]

0 голосов
/ 06 октября 2018

Вы, похоже, ищете all:

function :: [int] -> world -> world
function listOfInts world
  | all otherfunction listOfInts = world
  | otherwise                    = world {alive = false}
0 голосов
/ 06 октября 2018

Вы можете просто установить world как && с all otherfunction этого списка, например:

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

Так что с того момента, как один из listOfInts имеет элемент i где otherfunction i возвращает False, all 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.Но это означает, что если мир уже мертв, мы можем сделать много прецессии в списке, в этом нет необходимости.

...