ハスケルは、という安全な言語であるという評判を持っています。です。一般的に言えば、考えられるプログラミングエラーの多くがコンパイル時エラーになり、実行時間が短くなります。Haskellのcase文でデフォルトのcatch-allが必須ではないのはなぜですか?
この例の1つはif
です。 if内のelse
は常に必須です。両方の可能性をカバーする必要があります。これは、実行時に何が起こるかについて考えて、すべての可能性をカバーしているため、素晴らしいことです。
今、Haskellはcase
という表現を持っています。 (これは、他のオブジェクト指向言語および命令型言語のswitch
文といくつかの類似点を持ちますが、Haskellは型システムに豊富な機能を追加しています)。
ただし、case
の式では、デフォルトの「catch-all」は必須ではありません。
これは私にはランタイムエラーにつながるように聞こえます。
私の質問は:なぜHaskell case
ステートメントではデフォルトのキャッチオールは必須ではないのですか?
「_ - >エラー」は発生しないはずですが、これはデフォルトの動作です。ポイントは何ですか? –
あなたの最後のパターン 'xs - >" ... "' **は既に**すべてがキャッチされています - なぜ*あなたは '_'を使用する必要はないのですか?すべて一致しないでくださいエラーではありませんか? – Carsten
より良い質問は次のようなものかもしれません:*なぜHaskellのパターンマッチは非網羅的なのでしょうか?*すべてのケースを明示的にカバーするならば、キャッチオールは超過していても、 – stholzm