/ / Розділення рівня списку на два - haskell, функціональне програмування

Розподіл рівнів списку двома - гасел, функціональне програмування

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)