相互再帰関数

ある関数群のそれぞれの関数がその本体からその関数群の関数を呼び出している時、 その関数群は相互再帰的に定義されています。 相互再帰関数は実際の場面で一般に使われます。

例として、P を次のような自然数の関数とします:

1 から n までの範囲を i が取る時、i と P(i) の積の合計を Q(n) とするような関数 Q を導入しましょう。 すると関数 P と Q は次のように相互再帰的に定義できます:

次の P と Q の実装はこれらの定義を直接 ATS に翻訳したものです:

fun P (n:int): int = if n > 0 then 1 + Q(n-1) else 1 and Q (n:int): int = if n > 0 then Q(n-1) + n * P(n) else 0

キーワード and を使って関数定義を結合していることに注意してください。