1

私はお互いに再帰するいくつかのパターンマッチング関数を書いています.

recA [pattern ...] = [.. something that might call recB with the next pattern ..]
recB [pattern ...] = ...
recA [other ...]   = ...
...b

など これは可能ですか?もっと慣用的な代替手段はありますか?

4

1 に答える 1

6

Haskell 2010 レポートのセクション 4.4.3.1 Function Bindingsには、次のように書かれています。

関数を定義するすべての句は連続している必要があり、各句のパターンの数は同じでなければならないことに注意してください。

recAしたがって、例のようにインターリーブすることはできませんrecB

コンパイラーがさまざまな節をグループ化できないという理論的な理由 (私が見ることができる) はありません。このルールは、人的ミスや混乱を防ぐために導入されたものだと思います。ばかげた例として、次の何が問題になっていますか?

function1 [] = "a"
functionl (x:xs) = "b"
function1 (x:y:xs) = "c"
于 2013-03-21T16:01:17.500 に答える