2017-05-16 16 views
0

SMLのパターンマッチングについては疑問があります。 「Programming Language Pragmatics(Second Edition)」の本では、関数内でパターンマッチングを使用するとSMLで同じ変数を複数回表示することはできません。パターンマッチングは、関数が定義されたパターンで見つかるかどうかをチェックし、変数がお互いに関連しているかどうかをチェックするためのものです。しかし、それは私を混乱させました:なぜ、このようなものは実装できませんでしたか?同じ変数とのパターン一致

fun Eq nil = false 
| Eq (e) = false 
| Eq x::x::resto = true //Error 
| Eq x::y::resto = false 

コードチェックのこのスニペットリストの最初の2つの要素が等しい場合: ここ例です。 なぜコードの3行目が間違っているのですか?ありがとうございました。

+0

これは実装できますが、SMLではありません(私が気づいていない理由で)。 Erlangのように、あなたが望むものを許す言語があります。 https://gist.github.com/igstan/ac1d10e6d1b575278fd6e2a3b65ce437 –

答えて

2

パターンマッチングはコンパイル時の定数だけを比較し、そうでない場合は単純な変数割り当てを行います。パターンマッチングによる変数比較はできません。 3行目を削除し、4行目を

に変更する
Eq x::y::resto = x = y 

パターンマッチングも順番に行われます。 Eq eは実際にすべてと一致しているため、最終節です。

+0

答えをありがとうございます。 Eq eの代わりに、Eq [e]だったはずです。 –

関連する問題