を定義するにもかかわらず、私はこのように定義された関数があります - 私はとしてそれを定義していてもOCamlのネストされたパターン - 例外パターン
let test_func lis =
match lis with h::t ->
match h with h2::t2 ->
h2
| [] ->
[]
| [] ->
[];;
コンパイルすると、私はこの機能は[]のパターンと一致しないという警告を取得します2番目のケース!私は括弧を有する第二の一致ステートメントを囲むことにより、この問題を解決することができることを見出した:
let test_func lis =
match lis with h::t ->
(match h with h2::t2 ->
h2
| [] ->
[])
| [] ->
[];;
が、これが必要な理由私は思っていました。また、トップレベルの一致ステートメントで1番目と2番目のケースを入れ替えても動作します。
let test_func lis =
match lis with [] ->
[]
| h::t ->
match h with h2::t2 ->
h2
| [] ->
[];;
ありがとう!私たちはあなたのコードのインデントを修正した場合
私は常に括弧の代わりに 'begin ... end'を使うことを勧めます。コードブロックを識別することははるかに簡単です。 – nlucaroni
チップをありがとう!私はそれらのキーワードに精通していませんでした。 –