ガードでのパターンマッチングの使い方を理解できません。Haskell - Pattern Matchingフォーム(x:y:zs)
このサンプル関数は、文字列の最後の文字を返すことを目的としています。
myFun :: [Char] -> Char
myFun [email protected](f:s:rst)
| str == "" = error "0 length string"
| length str == 1 = head str
| rst == "" = s
| otherwise = lame (s:rst)
1文字の文字列が渡されたときに「関数内の非網羅的なパターン」で失敗しています。
Haskellは、(f:s:rst)
という形式を使用して1つの要素リストに一致することができないと認識してから、length
への呼び出しを評価しようとすると失敗します。
ハスケルに要素が1つしかない場合の対処方法を教えてくれるガードを作成するにはどうすればよいですか?
これは機能します - 現実的に、これを行うためのさまざまな簡単な方法があります。 私がここで本当に苦労しているのは、引数が提供されたパターンで解体できない場合に、何をすべきかを警備員に伝える方法があるかどうかを調べることです。 私はあなたの応答を意味する必要があります: "はい、ガードを使用するときは不可能な、関数宣言でパターンを定義する" –
ファンクションレベルのパターンマッチングが最初に行われます。つまり、最初の2つのガードあなたが遭遇する可能性のある条件(ゼロまたは1つの長さの 'str'をチェックするもの) –