3

このコードを REPL で実行すると、 がスローされError: syntax error: inserting DOTます。エラーメッセージの意味を知りたいです。

その後、コードを修正しましたが、今後の参考のためにそのメッセージの意味を知りたいと思っています。

part_dirdirection可能なパターンLeftとを持つカスタム データ型を返す関数ですRight

fun same (fs)=
    case fs of
         (f1::f2::fs') => case (part_dir(f1),part_dir(f2)) of
                               (dir1=dir2) => same (f2::fs')
                             | _           => false
        | _            => true
4

2 に答える 2

4

「構文エラー: DOT の挿入」は、不平を言っている位置に予期しないトークンがあり、その位置でドットが有効であることを意味します。ただし、それは、その位置で許可されるのがドットだけであること、またはトークンをドットに置き換えることでエラーが修正されることを意味するものではありません。

ほとんどの場合、エラー メッセージは、その位置に構文エラーがあることを伝える以外には役に立ちません。「DOT の挿入」の部分は、通常は正しい方向に導かないため、おそらく無視する必要があります。文句を言っている行と列を見て、そこにある構文エラーを見つけてみてください。

あなたの場合、問題はそれdir1=dir2が合法的なパターンではないことです。正当なパターンは、各引数、変数名、_または定数またはパターンのタプルのパターンを持つデータ型のコンストラクターです。「等しい2つの要素を含むタプル」というパターンはありません。そのためには、パターンが必要で、(dir1, dir2)次に条件dir1=dir2が必要ifです。

あなたの場合、しかし必要さえありませんif。あなたはただ書くことができます:

(dir1, dir2) => dir1 = dir2 andalso same (f2 :: fs)
于 2013-01-26T19:38:40.797 に答える