从haskell中的列表中删除包含null的元组

cjr*_*cjr 0 null haskell tuples list

美好的一天!

所以我试图写一个函数是Haskell如下

remove_nulls :: [ ([String], Int) ] -> [ ([String], Int) ] -> [ ([String], Int) ]
remove_nulls listofpair (y:ys)
| null listofpair = (y:ys)
| null (fst(head listofpair))= remove_nulls (tail listofpair) (y:ys)
| otherwise = remove_nulls (tail listofpair) (y:(head listofpair):ys)
Run Code Online (Sandbox Code Playgroud)

这需要一个看起来像这样的输入

remove_nulls [ ([],0) , (["abc", "dce"], 2) ] []
Run Code Online (Sandbox Code Playgroud)

我们的想法是,如果元组的第一个值包含null,它将从列表中删除元组.但是,每次调用它都会返回"函数remove_nulls中的非穷举模式".

我试过改变基本情况,但我总是得到相同的结果.任何帮助和利用都会很棒(目前只是在学习Haskell).

And*_*ács 6

如果您只想删除所有具有null第一个字段的对,

removeNulls xs = filter (not . null . fst) xs
Run Code Online (Sandbox Code Playgroud)

会做到这一点.如果您还不熟悉符号(not . null . fst),那么编写函数只是一种较短的方法\pair -> not (null (fst pair)).请参阅此SO问题以获得更多解释.

您的原始函数似乎尝试在第二个输入列表的第一个元素之后插入第一个列表中的好元素,并且无法工作,因为它不包括第二个列表为空的情况.