なぜこれがコンパイルされますか?printステートメントの後に変数が忘れ去られる
fun foo (h::t) =
h = hd(t);
しかし、これは
fun foo (h::t) =
PolyML.print (h::t);
print "\n";
h = hd(t);
ではないでしょうか?
なぜこれがコンパイルされますか?printステートメントの後に変数が忘れ去られる
fun foo (h::t) =
h = hd(t);
しかし、これは
fun foo (h::t) =
PolyML.print (h::t);
print "\n";
h = hd(t);
ではないでしょうか?
あなたの言語に対するあなたの欲求不満は、あなたが言語の限界以上にあなたの問題を解決することを妨げると思います。私が以前の答えで言ったように、セミコロンはあなたがそれらを使ったように使用することはできません。あなたは、カッコ内のこれらのステートメントをラップする必要があります。
fun foo (h::t) =
(
PolyML.print (h::t);
print "\n";
h = hd(t)
)
さらに、あなたは最初のスニペットは、セミコロンを必要としません:
fun foo (h::t) =
h = hd(t)
ここで彼らは、SMLにセミコロンが文を終了するために使用されていない、ことです式を分離するために使用されます。 ;
は、+
または-
のように2進演算子として考えることができます。追加された制約で、かっこが必要です。
また、おそらく=
演算子を間違った方法での内部で使用している可能性があります。これは割り当てではなく、他の言語の==
と同じように、同等のチェックです。割り当てが必要な場合はref
タイプが必要です。
この時点で、SMLの構文とセマンティクスを完全に誤解しているため、ここでは実際にチュートリアルを書くことができないため、正確に解決しようとしていることを尋ねる方がよいでしょう。