我想删除以“h”开头的列表中的每个字符串。
["hawrw", "basw", "HasD" , "hgkas"] => ["basw", "HasD"]
我的代码是:
kat (x:xs) = if head x == "h" then kat(xs) else x ++ kat(xs)
为什么它不起作用?我该如何修复我的代码?
我想删除以“h”开头的列表中的每个字符串。
["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
,因为你真的在过滤。filterList = filter (\x -> head x /= 'h')
您的代码不起作用,因为 a 的头部String
不是 a String
。Char
当你使用它时,"h"
你的意思是String
只有一个元素。
当然 Diego 的过滤器解决方案是首选的“真实世界”风格,但如果你想修复你的例子,为什么不使用更多的模式匹配呢?毕竟,字符串只是列表。
kat (('h':_):xs) = kat xs
kat (x:xs) = x : kat xs
kat [] = []
另一个不错的方法是使用列表推导:
kat xs = [ys | ys@(y:_) <- xs, y /= 'h']