3

整数のリストと 2 つの関数 f と g を受け取る無名関数を作成する必要があります。この関数は、リスト内の偶数の int に f を適用し、奇数の int に g を適用します。最後に、関数はすべての計算値の合計を返します..f(x)=2x,g(x)=x*x

私のコードは

val f = fn x => 2 * x;
val g = fn x => x * x;

fun s [] f g = []
 | s L f g =
   let 
     val n = hd(L) mod 2;
   in
    fn n => case n of
   0 => f(hd(L)) + s tl(L) f g
 | x => g(hd(L)) + s tl(L) f g
   end;

なにが問題ですか??

4

1 に答える 1

2

tl(L)まず、の呼び出しがs (tl(L)) f g正しく解析されるように、括弧を付ける必要があります。次に、関数の戻り型はint、基本ケース[]が返さ0れ、帰納的ケースが返されないようにするfn n =>ためnです(はですでに定義されているためval)。

の代わりにパターンマッチングを使用して関数をリファクタリングしhdtl頻繁に変更される引数を最後の引数として配置しました。

fun sum f g [] = 0
 | sum f g (x::xs) =
   let 
     val n = x mod 2
   in
     case n of
       0 => f x + sum f g xs
     | _ => g x + sum f g xs
   end;
于 2012-10-18T17:22:37.427 に答える