[英]Haskell get error when list parameter has more than one element
我剛進入Haskell,我正在嘗試創建一個函數,給定一個數字列表將返回其中所有負數的列表。 所以我這樣做了
negative:: [Int] -> [Int]
negative [x] = [z | z <- [x], x < 0]
當我嘗試使用列表中只有一個元素時它可以正常工作
負[-1]返回[-1]
否定[1]返回[]
但是,當我添加更多數字,例如負[0,-1]時,我收到以下錯誤:
程序錯誤:模式匹配失敗:否定[Num_fromInt instNum_v30 0,Num_fromInt instNum_v30 -1]
我嘗試用空格鍵入數字,但沒有空格,但結果是一樣的。 我猜我的代碼有問題,但是因為我還在習慣Haskell,所以我很難找到它。 任何幫助將不勝感激。
只需更換[x]
與式的左手側x
,並改變表達x < 0
至z < 0
請記住,我們篩選出單個元件,而不是容器本身)。
我將如何做到這一點:
negative :: [Int] -> [Int]
negative x = [z | z <- x, z < 0]
(可選)以下是使用高階函數解決相同問題的方法:
negative :: [Int] -> [Int]
negative xs = filter (< 0) xs
(如果您不知道高階函數是什么,請忽略前面的示例。隨着時間的推移,您將了解它們)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.