問題タブ [non-exhaustive-patterns]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
haskell - Haskellサブストリング関数を呼び出すと、なぜ「関数内の非網羅的なパターン...」が表示されるのですか?
私は本「論理学、数学、プログラミングへのハスケルの道」を読み進めています。(私は第1章の途中ですが、これまで楽しんでおり、継続するつもりです。)セクション1.5「Haskellゲームのプレイ」を読みました。 [Haskell]について知ってもらいましょう。」これまで、関数、型宣言、保護された方程式、リストパターンマッチング、およびwhere&letについて少し学びました。
私は演習1.17で立ち往生しています。この演習では、関数の部分文字列を作成するように求められます::文字列->文字列->ブール値ここで:
- xsがysのプレフィックスである場合、xsはysのサブストリングです。
- ysがy:ys'に等しく、xsがys'の部分文字列である場合、xsはysの部分文字列です。
- ysの部分文字列は他にありません
前の例で提供されたプレフィックス関数を使用しました。
そして試してみました:
...そしてこれの他の順列かもしれません。
実行するsubstring "abc" "xxxabcyyy"
とTrue
、が表示されますが、実行するsubstring "abc" "xxxabyyy"
と「***例外:substring.hs:(3,0)-(5,45):関数substringの非網羅的なパターン」が表示されます。理由がわかりません。「それ以外」を使用すると、どのように非網羅的なパターンが存在する可能性があるのかわかりません。
ところで、この本はまだif-then-elseをカバーしていません。今のところ、それを自分のソリューションから除外したいと思います。
haskell - Haskellでは、非網羅的なパターンがコンパイル時のエラーではないのはなぜですか?
これは、Haskellサブストリング関数を呼び出すときに「関数内の非網羅的なパターン...」が表示される理由のフォローアップです。
-Wall
を使用すると、GHCが非網羅的なパターンに対して警告できることを理解しています。部分関数を明示的に定義することが常に可能であることを考えると、デフォルトでコンパイル時エラーにならない理由は何でしょうか。
質問はGHC固有ではありません。
なぜなら...
- この種の分析を実行するためにHaskellコンパイラを強制したいと思った人はいませんか?
- 非網羅的なパターン検索では、すべてではありませんが一部のケースを見つけることができますか?
- 部分的に定義された関数は正当であると見なされ、上記のような構成を課さないように頻繁に使用されますか?この場合、非網羅的なパターンが役立つ/正当な理由を説明していただけますか?
haskell - 基本的なHaskell関数の非網羅的なエラー
私はHaskellを初めて使用し、2つの数値が等しいかどうかをチェックするための簡単な関数をまとめようとしています。これはコンパイルされますが、プログラムのテストを試してみると、これは網羅的ではないと表示されます。ブール関数でどのように網羅的でないのかわかりませんか?前もって感謝します:
haskell - 関数の非網羅的なパターン
このコードには問題があります。文字列内の同じ文字の最長部分文字列をカウントする必要がありますが、エラーがあります。
それが間違った型の問題であることは知っていますが、エラーがどこにあるのか、またはそれを見つけてデバッグする方法はわかりません
list - Haskell - ケースの非網羅的なパターン
私は次のコードを持っています:
正常にコンパイルされますが、プログラムを実行すると、次のエラーが発生します。
Melon.hs:(172,10)-(182,74): ケースの非網羅的なパターン
ここで、行を示す番号は、「= case F' (pc : pcs) (readC pc core) コア」から「in FAll コア' ((name, pcs') : acc) ps」までの行です。
問題は (pc : pcs) のパターンを使い果たすことにあると思いますが、どうすれば解決できるのかわかりません。
どんな助けでも大歓迎です。
コードは次のように更新されました。
私は次のように書いた:
しかし、プログラムは無限ループに陥ります:S
scala - Scalaで安全でないパターンマッチングを体系的に回避する方法は?
次の壊れた関数を考えてみましょう。
ここで、関数は で動作するはずでしたList[Int]
が、代わりに受け入れるようにリファクタリングされたためSeq[Int]
、コンパイラが気付かないうちに壊れてしまいました。
Scala の不完全なパターン一致検出のこの大きな穴により、ほとんど役に立たなくなります。
このような問題を体系的に検出する方法が必要です。具体的には、すべてのガイド付きパターン マッチでコンパイラにエラー/警告をinstanceof
発行させたいと考えています。つまり、シールされた階層とカスタム マッチャーでのみパターン マッチを許可したいと考えています。
パターン マッチングの安全性の保守的な (恣意的ではなく) チェックを行う既存のコンパイラ オプション/プラグインはありますか?
haskell - なぜ GHC は非網羅的なパターンについて不平を言っているのですか?
次のコードを GHC で (-Wall
フラグを使用して) コンパイルすると:
GHC は、以下のパターン マッチングがinsert
網羅的でないと不満を漏らしています。
なぜ GHC はこの警告を出しているのですか? GHC が不平を言うパターンが で処理されることは明らかですinsert x (Node a left right)
。
haskell - GHCI で「ケースの非網羅的パターン」を無効にする
私は「Monad Transformers Step by Step」という論文を読み、例を見ていきます。
eval0の例では、式に意図的な非網羅的なパターンがありcase
ます。
追加せずに例外「ケースの非網羅的なパターン」を抑制する方法はありますか
case
?の終わりまで ErrorT
この論文の後半の例では、モナド変換子を使用してこの状況を処理する方法を示しています。
scala - シングルトンタイプでマッチングするときに、Scala 2.10が「一致が完全ではない可能性がある」という警告を出すのはなぜですか?
Scala2.10.0-M4では
与える:
これは正しいです?確かに、試合は実際には徹底的です。
(その間、Scala2.9.Xに戻ると
これはおそらくバグでした。)
haskell - Haskell: 関数の網羅的でないパターン (単純な関数)
この関数の 1 番目と 3 番目のバージョンでこのエラーが発生するのに、2 番目の定義では問題なく動作する理由について、私は混乱しています。
前もって感謝します