smlに組み込みの整数関数はありますか?
私は次のような意味です:
ファイルから数値を読み取り、整数の場合は出力として表示し、整数でない場合は例外を発生させる必要があります。たとえば、(Int.fromString())の出力が整数であるかどうかを確認し、整数である場合は表示する必要があります...(上記を繰り返します)
型システムは、関数に与えられた値の型が関数の型シグニチャーと一致することを保証します。
つまり、入力として整数を受け取る関数がある場合、
fun double n = 2 * n
(* this function has type: int -> int *)
その後n
、常に整数になります。整数以外で関数を呼び出すことはできません。タイプエラーが発生します。
次のようなポリモーフィック関数がある場合
fun pair n = (n, n)
(* this function has type: 'a -> 'a * 'a *)
そうすると、実行時に入力がどのタイプであるかを知ることができなくなります。すべてのタイプの入力は同じように扱われます。
ただし、関数を定義するときに型を明示的にすることで、常にポリモーフィック関数を特定の型でのみ機能するように制限できます。
fun pairInt (n : int) = (n, n)
(* this function has type: int -> int * int *)
との呼び出しから得られるものを比較することで、pair
との違いを確認できます。pairInt
pair 5
pairInt 5
pair "foo"
pairInt "foo"
を使用している場合、を使用しint option
てに変換しようとする場合のように、いくつかの方法でを抽出できます。これを行う方法については、「 smlnjで「文字列オプション」を「文字列」にどのように変換しますか? 」という質問を参照してください。string
int
Int.fromString
int