構図

2010-11-20 8 views
0

私はいくつかの関数NTimesComposition(F:* int型(int型 - > int型)、N:int型)書く必要が Fと整数Nと fはの構図を行った後、いくつかの機能を受け取ります、n回このようなf(x、f(x、y))))< - (ここではn = 3の場合)私はsmlnjに書き始めましたが、私はどんな考えを事前に感謝を考えた:構図

NTimesComposition(f:(int * int -> int), n:int) 
    if n = 1 then fn(x,y) => f(x, y) else NTimesComposition...//here I'm stuck, must be recurstion 

答えて

1

あなたは既にn = 1のためにそれを持って、あなたが最も可能性が高いだけでを渡すのを忘れてをn> 1の再帰呼び出しに置き換えます。明らかにここにはという形式のものが必要です。ここで、...の部分は再帰呼び出しが行われる部分です。あなたはそれがfn (x,y) => NTimesComposition (f, n-1)、あなたがnで説明あなたの引数として「長い」として無名関数のチェーンを構築終わるだろう作る再帰部分で(x,y)を忘れてしまった場合は

。その場合、NTimesCompositionの異なるタイプが、nあなたが供給しているものに依存しますが、これはSMLのタイプシステム(Hindley-Milner)の仕組みによっては無効です。

次の2つの関数は、最初は匿名関数を使用してコード最も似ているあなた

fun foo (f, 1) = (fn xy => f xy) 
    | foo (f, n) = (fn (x,y) => f(x, foo (f, n-1) (x,y))) 

fun baz (f, 1) xy = f xy 
    | baz (f, n) (x,y) = f(x, foo (f, n-1) (x,y)) 

のための仕事を行います。

関連する問題