Haskellで関数を定義する2つ以上の方程式が同じwhere/letブロックを共有できますか?
質問を説明するために考案された例を提示しましょう。
まず、開始点として次のコードを検討してください。
someFunction v1 v2 v3 = difference ^ v3
where
difference = v1 - v2
ここまでは順調ですね。しかし、次に、v3 == 99で差が4未満の場合にゼロを返す必要がある「代替ケース」を処理する必要があると想像してください(完全に任意ですが、これらが私の要件であるとしましょう)。
私の最初の考えはこれを行うことです:
someFunction v1 v2 99 | difference < 4 = 0
someFunction v1 v2 v3 = difference ^ v3
where
difference = v1 - v2
ただし、someFunctionの最初の式とsomeFunctionの2番目の式の両方が同じwhereブロックを共有していないため、これは機能しません。whereブロックには変数が1つしかないため、これはこの不自然な例では大したことではありません(「差」)。しかし、実際の状況では、変数が多数存在する可能性があり、それらを繰り返すことは受け入れられません。
ガードを使用し、方程式を1つだけ持つことで、これを解決する方法をすでに知っています。問題は、複数の方程式が同じwhere / let句を共有する方法はありますか?多くの警備員がいる1つの方程式だけを強制するのではなく、異なるパターンの複数の方程式を作成することが望ましいと思われるためです。