ATS における外部関数呼び出し

ATS から外部関数を呼び出すことは簡単です。 例えば、次のコードはその典型的な例です:

local extern fun __fprintf : (FILEref, string(*fmt*), int, int) -> int = "mac#fprintf" in (* in of [local] *) // val N = 12 val _ = __fprintf (stdout_ref, "fact(%i) = %in", N, fact(N)) // end // end of [local]

この fprintf 関数は stdio.h で宣言されており __fprintf というローカルな名前が与えられています。 また外部関数呼び出しにふさわしいインターフェイスになっています。

また ATS から外部関数を直接呼び出すビルトインのしくみもあります。 例えば、次のコードは上記で示したコードと本質的に同じです:

val N = 12 val _ = $extfcall(int, "fprintf", stdout_ref, "fact(%i) = %in", N, fact(N))

$extfcall は外部関数呼び出しを作るために使われます。 その最初の引数は関数呼び出しの返値の型です。 2番目の引数には呼び出す関数の名前を文字列で指定します。 残りの引数群は呼び出す関数への引数群になります。