我想刪除列表中以「h」開頭的每個字符串。Haskell多維列表:初學者問題
[ 「hawrw」, 「basw」, 「HasD」, 「hgkas」] => [ 「basw」, 「HasD」]
我的代碼是:
kat (x:xs) = if head x == "h" then kat(xs) else x ++ kat(xs)
它爲什麼不起作用?我該如何修復我的代碼?
我想刪除列表中以「h」開頭的每個字符串。Haskell多維列表:初學者問題
[ 「hawrw」, 「basw」, 「HasD」, 「hgkas」] => [ 「basw」, 「HasD」]
我的代碼是:
kat (x:xs) = if head x == "h" then kat(xs) else x ++ kat(xs)
它爲什麼不起作用?我該如何修復我的代碼?
kat [] = []
"h"
是一個字符串,你要比較一個字符,請使用:'h'
++
是字符串連接,您要創建一個列表,將其替換爲:
。注:
head
是不是安全,並會失敗,一個空字符串""
。您可以使用null x
進行測試。filter
,因爲你真的過濾。謝謝我是功能編程新手。 – Valakor 2013-05-08 01:09:16
filterList = filter (\x -> head x /= 'h')
您的代碼不beause一個String
頭工作是不是String
。當您使用"h"
時,這是一個Char
,您的意思是僅有一個元素的String
。
非常感謝 – Valakor 2013-05-08 01:09:35
迭戈的濾波器解決方案當然是首選的「現實世界」風格,但是如果您想修復您的示例,爲什麼不使用更多的模式匹配?畢竟,字符串只是列表。
kat (('h':_):xs) = kat xs
kat (x:xs) = x : kat xs
kat [] = []
另外一個不錯的方法是使用列表理解:
kat xs = [ys | [email protected](y:_) <- xs, y /= 'h']
定義 「不工作」 – 2013-05-08 00:53:33