Z.p*_*yyy 1 haskell tuples pattern-matching
尝试与元组匹配时遇到问题.
filterSth :: [a]->[b]->([a],[b])
filterSth _ [] = (_, [])
Run Code Online (Sandbox Code Playgroud)
这意味着当第二个参数是一个空列表时,我不关心我希望返回的元组的第一个元素.我该如何实现呢?
如果您不关心元组的第一个元素,并且您确定不会使用它,则可以返回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)
如果您不关心作为元组的第一个组件返回什么,我建议您返回一个错误,如果您不小心使用它将会爆炸.
filterSth _ [] = (error "Don't use this", [])
Run Code Online (Sandbox Code Playgroud)