ユーザーに変数を入力して、それが実数または整数であることを確認し、対応するアクションに対して 2 つの異なる操作を行うように依頼したいと考えています。整数の場合は true と言い、そうでない場合は false とします。
fun realorinteger(n)= n=int の場合は true、そうでない場合は false。
しかし、それは間違いなく機能しません。if n in int も試しました。
何か助けはありますか?
これはできません。
型システムでは、関数が複数の異なる型を取り、その型に従って動作することを単純に許可していません。関数が を受け取るか、 を受け取りint
ますreal
。string
(または、両方を取りますが、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);