标准ML:返回不同类型

Rya*_*yan 2 functional-programming function ml sml

我需要根据传递给另一个函数的函数返回一个不同的值.

所以,给定: fun inc x = x + 1;

和: fun double [] = [] | double (h::t) = 2*h::double (t);

你应该能够调用我正在使用的函数.

示例调用(我正在创建的函数名为test):

test (inc, 5);- 它将返回6

-要么-

test (double, [1,2,3,4]);- 它将返回[2,4,6,8]

我知道函数不能以面值来做这件事,但是这可以通过抽象层来实现吗?

sep*_*p2k 7

当然,这是可能的:

fun test (f, x) = f x
Run Code Online (Sandbox Code Playgroud)

test现在有了类型(('a -> 'b) * 'a) -> 'b,这意味着如果传入一个返回int(比如inc)的函数,结果将是一个int,如果传入一个返回列表的函数,结果将是一个列表.

作为旁注:double可以更容易/惯用地定义为fun double xs = map (fn x -> x*2) xsval double = map (fn x -> x*2).