我試圖一半的偶數在列表中的偶數劃分列表
halfEvens :: [Int] -> [Int]
halfEvens xs = [x `div` 2 | x -> xs, even x]
誤差 錯誤:輸入解析錯誤「 - >」
哪些呢這意味着,以及如何解決它? 感謝
我試圖一半的偶數在列表中的偶數劃分列表
halfEvens :: [Int] -> [Int]
halfEvens xs = [x `div` 2 | x -> xs, even x]
誤差 錯誤:輸入解析錯誤「 - >」
哪些呢這意味着,以及如何解決它? 感謝
halfEvens :: [Int] -> [Int]
halfEvens xs = [x `div` 2 | x <- xs, even x]
x <- xs
作爲x
從xs
得出被讀取。
如果你想保持奇數列表:
halfEvens :: [Int] -> [Int]
halfEvens = map (\x -> if (x `mod` 2) == 0 then x `div` 2 else x)
如果連那麼X ....'也適用,並且類似於OP代碼。 – chi
它與您的應用做 - >,基本上 - >是一箇中綴類型的操作也被稱爲功能箭頭(函數生成器),誰的目的是將參數應用於左邊的右邊,所以 from -> to
但列表理解與< -一起使用,它採用IO操作並將其綁定到左參數,因此to <- from
,對您的小修復功能:
halfEvens :: [Int] -> [Int]
halfEvens xs = [x `div` 2 | x <- xs, even x]
: [編輯從這裏忽略別的] =============================== ==========================================
但是,如果你想是除以2都爲偶數,那麼你就錯了,因爲這個函數將返回唯一的偶數,而丟棄所有其他人。
halfEvens :: [Int] -> [Int]
halfEvens [] = []
halfEvens (x:xs) = if even x then x `div` 2 : halfEvens else x : halfEvens
是做了正確的方式,@ AlexJ136答案也是開門見山,這似乎比我的更有效,所以我會去了。
瞄準你的箭頭其他方式,所以'< - '' –