2016-11-28 64 views
0

我試圖一半的偶數在列表中的偶數劃分列表

halfEvens :: [Int] -> [Int] 
halfEvens xs = [x `div` 2 | x -> xs, even x] 

誤差 錯誤:輸入解析錯誤「 - >」

哪些呢這意味着,以及如何解決它? 感謝

+2

瞄準你的箭頭其他方式,所以'< - '' –

回答

1
halfEvens :: [Int] -> [Int] 
halfEvens xs = [x `div` 2 | x <- xs, even x] 

x <- xs作爲xxs得出被讀取。

2

如果你想保持奇數列表:

halfEvens :: [Int] -> [Int] 
halfEvens = map (\x -> if (x `mod` 2) == 0 then x `div` 2 else x) 
+0

如果連那麼X ....'也適用,並且類似於OP代碼。 – chi

0

它與您的應用做 - >,基本上 - >是一箇中綴類型的操作也被稱爲功能箭頭(函數生成器),誰的目的是將參數應用於左邊的右邊,所以 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答案也是開門見山,這似乎比我的更有效,所以我會去了。