halveEvens :: [Int] -> [Int]
halveEvens xs = [if xs == even then 'div' 2 xs | x<-xs]
嘿我想寫下一些代碼在haskell這將從列表中除去他們並將它們除以二。我對此很新,所以我遇到了一些麻煩。有沒有人能讓我走上正軌?我想用列表理解來達到這個目的!列表除以2的列表
halveEvens :: [Int] -> [Int]
halveEvens xs = [if xs == even then 'div' 2 xs | x<-xs]
嘿我想寫下一些代碼在haskell這將從列表中除去他們並將它們除以二。我對此很新,所以我遇到了一些麻煩。有沒有人能讓我走上正軌?我想用列表理解來達到這個目的!列表除以2的列表
在您的功能xs
是一個列表even
is a function,檢查Integral
是否是偶數。
要使用像運算符這樣的函數,可以用下面的引號括起來:x `div` 2
。
halveEvens :: [Int] -> [Int]
halveEvens = map halveOneEven
halveOneEven :: Int -> Int
halveOneEven x = if (even x) then (x `div` 2) else x
使用列表理解與保護逗號後:
halveEvens xs = [x `div` 2 | x<-xs, even x]
你可以把它讀作一個數學上的定義:採取一切x
值從xs
是偶數,並收集將它們的結果列入清單。在ghci
中,您可以使用:t
檢查類型並使它們匹配(xs
類型爲[Int]
,x
爲Int
,並且even
爲(Integral a) => a -> Bool
)。
「我想用列表理解實現這個」使得這看起來像家庭作業......這就是說,讓我指出,在Haskell中,「if」需要'then'和'else',你也是當你真的需要使用元素時,使用'|'左側的完整列表'xs',並且應該查看'和反引號之間的區別,以及使用反引號創建的運算符的位置。 – jamshidh 2014-09-27 21:22:46
你也許應該有一個輔助函數......爲什麼你需要它與列表理解? – Arnon 2014-09-27 21:49:25
你近了,剛剛閱讀了關於[list comprehension](http://www.haskell.org/haskellwiki/List_comprehension)的語法,尤其是。如何寫警衛。 – 2014-09-28 10:29:50