C言語コード中にアセンブラコードを埋め込むのと同様に、ATS コード中にC言語コードを埋め込むことも簡単です。 例えば、この章の最初で示した例は、次のような一つのファイルに書くことができます:
// extern fun fact (n: int): int extern fun fact2 (n: int, res: int): int = "ext#fact2_in_c" // implement fact (n) = fact2 (n, 1) // %{ int fact2_in_c (int n, int res) { while (n > 0) { res *= n ; n -= 1 ; } ; return res ; } %} //
%{# と %} シンボルの間にC言語コードを配置することもできます。 foo.sats という名前のファイルがこの方法でC言語コードを含んでいる場合を考えてみましょう。 もし foo.sats が foo.dats という名前の別のファイルに staload されると、 foo.sats の %{# と %} の間のコードは foo.dats をコンパイルして生成されたC言語コード中に配置されます。