2

MLで再帰関数を返すにはどうすればよいですか?

私の知る限り、再帰的な無名関数を返すことはできず、無名関数のみを戻り値として使用できます(戻り値が関数の場合...)。

4

1 に答える 1

3

これは、あなたが疑問に思っているような例でしょうか?

fun f n =
   let
      fun g k =
         if k = n then [] else k :: g (k-1)
   in
      g
   end

名前を付けることによってのみ再帰的な定義を作成できますが、let式はどこにでも記述できるため、それは問題ではありません。

コメントに具体的に答えるために更新します。

fun f g =
   let
      fun h 0 = g 0
        | h i = h (i-1) + g i
   in
      h
   end

(より効率的な実装はh末尾再帰になります。)

于 2012-11-19T22:42:24.687 に答える