halveEvens :: [Int] -> [Int]
halveEvens xs = [if xs == even then "div" 2 xs | x<-xs]
Гей, я намагаюся записати якийсь код у haskellякий візьме вічні зі списку і розділить їх на два. Я справді новачок у цьому, тому маю певні проблеми. Хтось міг би поставити мене на правильний шлях? Я хочу досягти цього, використовуючи розуміння списку!
Відповіді:
3 для відповіді № 1У вашій функції xs
це список, even
це функція що перевіряє, якщо Integral
є парним.
Щоб використовувати такі функції, як оператори, ви вкладаєте їх у зворотні лапки наступним чином: x `div` 2
.
halveEvens :: [Int] -> [Int]
halveEvens = map halveOneEven
halveOneEven :: Int -> Int
halveOneEven x = if (even x) then (x `div` 2) else x
0 для відповіді № 2
Використання розуміння списку із захистом після коми:
halveEvens xs = [x `div` 2 | x<-xs, even x]
Ви можете прочитати це як математичне визначення: візьміть все x
значення з xs
парні, і зберіть результат ділення їх на список. В ghci
ви можете використовувати :t
перевірити типи та зробити їх відповідними (xs
є типу [Int]
, x
є Int
, і even
є (Integral a) => a -> Bool
)