0

ユーザーに変数を入力して、それが実数または整数であることを確認し、対応するアクションに対して 2 つの異なる操作を行うように依頼したいと考えています。整数の場合は true と言い、そうでない場合は false とします。

fun realorinteger(n)= n=int の場合は true、そうでない場合は false。

しかし、それは間違いなく機能しません。if n in int も試しました。

何か助けはありますか?

4

1 に答える 1

2

これはできません。

型システムでは、関数が複数の異なる型を取り、その型に従って動作することを単純に許可していません。関数が を受け取るか、 を受け取りintますrealstring(または、両方を取りますが、s、 s などを取ることもできlistます...つまり、ポリモーフィックです)

次のように、整数または実数の値をカプセル化するデータ型を作成することで、それを偽造できます。

datatype intorreal = IVal of int | RVal of real

次に、そのような値に対してパターン マッチングを使用して、目的の数値を抽出できます。

fun realorinteger (IVal i) = ... (* integer case here *)
  | realorinteger (RVal r) = ... (* real case here *)

この関数は type を持ちますintorreal -> x。ここxで、 は右側の式の型です。どちらの場合も、結果の値は同じ型でなければならないことに注意してください。

このような関数の例としては、丸め関数があります。

fun round (IVal i) = i
  | round (RVal r) = Real.round r

次に、次のように呼び出されます。

val roundedInt  = round (IVal 6);
val roundedReal = round (RVal 87.2);
于 2012-10-02T10:29:34.010 に答える