Проблема в списке кортежей - PullRequest
2 голосов
/ 06 июня 2011

У меня есть список кортежей, которые мне нужно вернуть [Int], все места которых делятся на 2 ..

type A = [(Int, Int, Int, Int)]

func :: A -> [Int]
func tuples =  [a | (a, b, c, d) <- tuples, map a `mod` 2 == 0]

func [(244,244,244,244),(244,244,244,244),(244,244,244,244)]

Выход

[244,244,244]

У меня есть текущий код, но проблема в том, что это только проверка позиции a .., но мне нужно все a, b, c, d ?

Ответы [ 2 ]

3 голосов
/ 06 июня 2011
type A = (Int, Int, Int, Int)
func :: [A] -> [Int]
func t =  [a | (a, b, c, d) <- t, all even [a,b,c,d]]

Функция all возвращает истину, только если все данные удовлетворяют предикату. Я собрал кортеж в список и проверил предикат.

2 голосов
/ 06 июня 2011

Просто добавьте еще несколько охранников для b, c и d:

a `divides` b =  b `mod` a == 0
func tuples =  [a | (a, b, c, d) <- tuples, all (divides 2) [a,b,c,d]]
...