【问题标题】:Anonymous function in mlml 中的匿名函数
【发布时间】:2012-10-19 01:22:37
【问题描述】:

我要编写一个匿名函数,它接受一个整数列表和两个函数 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;

怎么了??

【问题讨论】:

    标签: sml


    【解决方案1】:

    首先,您应该在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;
    

    【讨论】:

      猜你喜欢
      • 2014-12-27
      • 2015-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-11
      • 2011-12-29
      • 2014-11-11
      相关资源
      最近更新 更多