3

我必须编写一个匿名函数,它采用整数列表和两个函数 f 和 g。该函数将 f 应用于列表中的偶数 int,并将 g 应用于奇数 int。最后该函数返回所有计算值的总和..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 回答