2012-04-26 4 views
-2

私は、この関数の宣言が違法であると言われていますHaskellの違法なパターンマッチ

F3 1(F2 x)はyの

この違法が、私はそれが第二とは何かを持っていると思う理由を私は理解してください引数(f2 x)。誰も私にこれを説明することはできますか?関数定義で

+13

これは宣言ではありません。これは表現の断片です。周囲のコードとは何ですか?そして、あなたはどんなエラーを受けますか? –

+0

ハズケの入門コースの試験問題の一部です。問題は次のとおりです。パターンを使用して左辺(関数f1、f2、f3、f4を定義する)のパターンを使用する場合は、パターンが不正であるかどうか、合法であれば、正確に説明してください 違法であれば、なぜ許可されていないのか説明してください。(v)f5 a1 [4](f1、f2、f3、f4、f5、f4、f5) 、a] [] – grimebox

+0

私はそれらをすべて理解しています(i) – grimebox

答えて

8

は、関数のパラメータがpatternsでなければならない、つまり、彼らはすべてのものと一致し、何も結合しない

  • ワイルドカード_
  • 可変パターンvarにする必要があり、そのすべて一致し、対応する引数をパラメータにバインドします。
  • パターンに等しい引数に一致するリテラル(整数、浮動小数点、文字または文字列)
  • 値co nstructor、標識されたパターンCon{ field1 = value1, field2 = value2 }
  • 括弧のパターン(pattern)
  • タプルパターン(pattern1, pattern2, pattern3)
  • 、リストパターン[elem1, elem2, elem3, elem4]
  • 、(パターンを入れ子にすることができるように)そのアリティ要求と同じ数のパターンに適用されます
  • としてパターン[email protected]、それが一致する場合patternの対応する部分にvarおよびコンポーネントに全体引数結合、または
  • 反駁可能なパターン~patternは、引数respをバインドします。その部分にpattern resp。引数が実際にpatternと一致しない場合、実行時エラーが発生します。

断片

f3 1 (f2 x) y 

における一部(f2 x)パターンが、式、(f2)が値(x)に適用される関数ではない、従って関数定義の形式を持つことができない

f3 1 (f2 x) y = whatever 

最も近い法的な関数の定義は以下のようになり

f3 1 (F2 x) y = ... 

(単項)値コンストラクタF2です。

関連する問題