2012-10-01 67 views
1

我嘗試鍵入與元組匹配時出現問題。如何在Haskell中使用元組進行模式匹配?

filterSth :: [a]->[b]->([a],[b]) 
filterSth _ [] = (_, []) 

這意味着,當第二個參數是一個空列表,我不在乎,我希望返回的元組的第一個元素。 我該如何執行此操作?

+0

這個問題並不清楚你真正想做什麼以及爲什麼你想這樣做。也許有更好,更實用的方法來做你想做的事。因此,添加上下文的問題。 – Satvik

回答

7

如果你不關心的元組的第一個元素,你確定你不會使用它,你可以返回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, []) 
+0

呃......如果我只是想讓它保持與我發送的相同,該怎麼辦? –

+0

我已經更新了答案。現在更清楚了嗎? – Jan

+0

是的!我明白了~~感謝您的幫助〜 –

5

如果你不關心你返回的內容作爲元組的第一部分,我建議你回如果您不小心使用它,將會炸掉一個錯誤。

filterSth _ [] = (error "Don't use this", []) 
+0

是的......看起來即使我不在乎,別人也在乎~~我會盡量避免這種事情〜謝謝您的評論〜 –