-3

この関数宣言は違法であると言われました:

f3 1 (f2 x) y

これが違法である理由は理解できます。2 番目の引数 (f2 x) と関係があると思います。誰かが私にこれを説明できますか?

4

1 に答える 1

8

関数定義では、関数のパラメーターはpatternでなければなりません。

  • _すべてに一致し、何もバインドしないワイルドカード
  • すべてに一致し、対応する引数をパラメーターにバインドする変数 pattern var
  • パターンに等しい引数に一致するリテラル (整数、浮動小数点、文字、または文字列)、
  • アリティが要求する数のパターンに適用される値コンストラクター (パターンをネストできるようにするため)、
  • リスト パターン[elem1, elem2, elem3, elem4]
  • ラベル付きパターンCon{ field1 = value1, field2 = value2 },
  • 括弧で囲まれたパターン(pattern)
  • タプル パターン(pattern1, pattern2, pattern3),
  • as-pattern、にvar@pattern引数全体をバインドし、 コンポーネントが一致する場合varは の対応する部分にバインドする、またはpattern
  • ~pattern引数 resp をバインドする反駁不可能なパターン。それぞれの部分pattern。引数が実際に一致しない場合、実行時エラーが発生しますpattern

(f2 x)フラグメントの部分

f3 1 (f2 x) y

はパターンではなく、f2値 ( ) に適用される式、関数 ( x) であるため、関数定義は次の形式を持つことはできません。

f3 1 (f2 x) y = whatever

最も近い有効な関数の定義は次のとおりです。

f3 1 (F2 x) y = ...

(単項)値コンストラクター F2を使用します。

于 2012-04-26T19:49:53.947 に答える