私はお互いに再帰するいくつかのパターンマッチング関数を書いています.
recA [pattern ...] = [.. something that might call recB with the next pattern ..]
recB [pattern ...] = ...
recA [other ...] = ...
...b
など これは可能ですか?もっと慣用的な代替手段はありますか?
私はお互いに再帰するいくつかのパターンマッチング関数を書いています.
recA [pattern ...] = [.. something that might call recB with the next pattern ..]
recB [pattern ...] = ...
recA [other ...] = ...
...b
など これは可能ですか?もっと慣用的な代替手段はありますか?
Haskell 2010 レポートのセクション 4.4.3.1 Function Bindingsには、次のように書かれています。
関数を定義するすべての句は連続している必要があり、各句のパターンの数は同じでなければならないことに注意してください。
recA
したがって、例のようにインターリーブすることはできませんrecB
。
コンパイラーがさまざまな節をグループ化できないという理論的な理由 (私が見ることができる) はありません。このルールは、人的ミスや混乱を防ぐために導入されたものだと思います。ばかげた例として、次の何が問題になっていますか?
function1 [] = "a"
functionl (x:xs) = "b"
function1 (x:y:xs) = "c"