我想删除列表中以“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