如何在Haskell中使用元组进行模式匹配?

Z.p*_*yyy 1 haskell tuples pattern-matching

尝试与元组匹配时遇到问题.

filterSth :: [a]->[b]->([a],[b])
filterSth _ [] = (_, [])
Run Code Online (Sandbox Code Playgroud)

这意味着当第二个参数是一个空列表时,我不关心我希望返回的元组的第一个元素.我该如何实现呢?

Jan*_*Jan 7

如果您不关心元组的第一个元素,并且您确定不会使用它,则可以返回undefined,即

filterSth _ [] = (undefined, [])
Run Code Online (Sandbox Code Playgroud)

请记住,尝试评估undefined将导致运行时异常.

另一个想法可能是返回Either ([a], [b]) [b].

filterSth :: [a] -> [b] -> Either ([a], [b]) [b]
filterSth _ [] = Right []
-- and a case for a non-empty second argument
Run Code Online (Sandbox Code Playgroud)

如果要返回第一个参数不变,则无法使用_._意味着你不关心论证的价值是什么,你不会使用它.既然你要使用它,你必须更换_带有命名参数,并明确其返回

filterSth a [] = (a, [])
Run Code Online (Sandbox Code Playgroud)


aug*_*tss 5

如果您不关心作为元组的第一个组件返回什么,我建议您返回一个错误,如果您不小心使用它将会爆炸.

filterSth _ [] = (error "Don't use this", [])
Run Code Online (Sandbox Code Playgroud)