Как рекурсивно перебрать список из 3-х кортежей в Haskell - PullRequest
0 голосов
/ 14 октября 2018

У меня есть список из 3-х кортежей [(Int, Int, Int)]

Я написал следующие вспомогательные функции.

--This function is used to check if the first element is over 20    
checkValue :: (Int, Int, Int) -> Bool  
checkValue (x, _, _) = x  > 20


--This function is used to set the 3-tuple to return (50, 50, 50)
setValue :: (Int, Int, Int) -> (Int, Int, Int)
setValue a = (50, 50, 50)

Моя цель - перебрать список из 3-х кортежей иприменить мои вспомогательные функции.

Для каждого элемента в списке

  • Запустить checkValue.

  • Если checkValue = true, применить setValueк текущему кортежу.

  • Продолжить

Так что, в принципе, если у меня есть это [(0, 0, 0)(30,15,0)] Это вернет [(0, 0, 0)(50, 50, 50)]

Может ли кто-нибудь указать мне вправильное направление, застрял на этом некоторое время.

1 Ответ

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

Если вы хотите использовать рекурсию, вы можете сделать следующее:

modif :: [(Int, Int, Int)] -> [(Int, Int, Int)]
modif []                 = []
modif (t@(x, _, _) : ts) = case x > 20 of
                           True -> (50, 50, 50) : modif ts
                           _    -> t : modif ts

*Main> modif [(0, 0, 0),(30,15,0)]
[(0,0,0),(50,50,50)]

Часть t@(x, _, _) обозначает обработку шаблона x на первом элементе кортежа, а также называет все это целиком.как t.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...