1

タプルと型一致しようとすると問題が発生します。

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

これは、2 番目の引数が空のリストの場合、返したいタプルの最初の要素を気にしないことを意味します。どうすればこれを実装できますか?

4

2 に答える 2

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, [])
于 2012-10-01T10:48:59.633 に答える
5

タプルの最初のコンポーネントとして返すものを気にしない場合は、誤って使用すると爆発するエラーを返すことをお勧めします。

filterSth _ [] = (error "Don't use this", [])
于 2012-10-01T10:50:54.600 に答える