4

Haskell では、指定された数値のリストに対して、サブリスト内の各要素の符号を変更する再帰関数を書きたいと思います。

list = [[1, 3, 6.7, 7.0], [], [1, 8.22, 9, 0]]

multiply (x:xs) = [n * (-1) | n <- x] : multiply xs

しかし、私はエラーが発生します:

[[-1.0,-3.0,-6.7,-7.0],[],[-1.0,-8.22,-9.0,-0.0]
*** Exception: learning.hs:26:1-48: 
    Non-exhaustive patterns in function multiply

空のサブリストで例外を処理するにはどうすればよいですか?

4

4 に答える 4

3

再帰的なステップを処理するという驚異的な仕事をしました。しかし、どのプログラミング言語でもそうであるように、再帰を終了するには基本ケースも必要です。具体的には、 の明示的なケースが必要です[]。が与えられた場合、これ以上行う作業がないため、[]関数が を返すようにします。[]検討

multiply :: Num a => [[a]] -> [[a]]
multiply [] = []
multiply (x : xs) = [n * (-1) | n <- x] : multiply xs

要点は、まさにあなたがすでに書いたものです。[]入力を処理するには 2 行目が必要です。最初の行は型シグネチャです。これは厳密には必須ではありませんが、Haskell では優れた設計であり、問​​題が発生した場合により適切なエラー メッセージが表示されます。

于 2021-09-06T22:24:38.040 に答える