我嘗試鍵入與元組匹配時出現問題。如何在Haskell中使用元組進行模式匹配?
filterSth :: [a]->[b]->([a],[b])
filterSth _ [] = (_, [])
這意味着,當第二個參數是一個空列表,我不在乎,我希望返回的元組的第一個元素。 我該如何執行此操作?
我嘗試鍵入與元組匹配時出現問題。如何在Haskell中使用元組進行模式匹配?
filterSth :: [a]->[b]->([a],[b])
filterSth _ [] = (_, [])
這意味着,當第二個參數是一個空列表,我不在乎,我希望返回的元組的第一個元素。 我該如何執行此操作?
如果你不關心的元組的第一個元素,你確定你不會使用它,你可以返回undefined
,即
filterSth _ [] = (undefined, [])
記住,試圖評估undefined
將導致運行時異常。
另一種想法可能是返回Either ([a], [b]) [b]
。
filterSth :: [a] -> [b] -> Either ([a], [b]) [b]
filterSth _ [] = Right []
-- and a case for a non-empty second argument
如果要不變地返回第一個參數,則不能使用_
。 _
意味着你不關心論證的價值是什麼,你不打算使用它。既然你是要使用它,你必須有一個命名參數來代替_
,並明確其返回
filterSth a [] = (a, [])
如果你不關心你返回的內容作爲元組的第一部分,我建議你回如果您不小心使用它,將會炸掉一個錯誤。
filterSth _ [] = (error "Don't use this", [])
是的......看起來即使我不在乎,別人也在乎~~我會盡量避免這種事情〜謝謝您的評論〜 –
這個問題並不清楚你真正想做什麼以及爲什麼你想這樣做。也許有更好,更實用的方法來做你想做的事。因此,添加上下文的問題。 – Satvik