如何在SML中将参数声明为函数?

时间:2017-11-20 19:30:56

标签: sml smlnj

我的问题是这样的: 如何定义一个函数,它接收函数而不使用类型约束,换句话说,不必键入fun f1(f2:type-> type)? 我试图想出一种方法,它使用参数f2作为一个函数,但它没有得到任何东西。 有什么想法吗?

2 个答案:

答案 0 :(得分:2)

你可以用一个你不能用任何其他值做的函数来做的一件事就是调用它。因此,使用f2作为函数意味着调用它 - 即将其应用于参数。

例如,您可以将f1定义为:

fun f1 f2 = f2 42

f1的推断类型为(int -> 'a) -> 'a(类型为f2 int -> 'a)。

答案 1 :(得分:0)

通过返回一个匿名函数,你可以这样做,使得结果函数可以采用任意函数进行输入(虽然不是非常有用的方式):

  video::-webkit-media-controls-panel {
    width: 100%;
  }

这使得fun id f = fn x => f x 成为一个更高阶函数,它不会修改其输入函数。 id的类型为id

作为其使用"的一个例子:

fn : ('a -> 'b) -> 'a -> 'b

一个稍微有趣的示例,仅适用于- fun f x = x*x; val f = fn : int -> int - val g = id f; val g = fn : int -> int - g 5; val it = 25 : int 类型的函数:

'a -> 'a