标准ML:返回不同类型

时间:2010-09-02 18:51:02

标签: function functional-programming sml ml

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

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

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

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

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

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

-OR -

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

我知道函数不能以表面的方式做到这一点,但是这可以通过抽象层来实现吗?

1 个答案:

答案 0 :(得分:7)

当然,这是可能的:

fun test (f, x) = f x

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

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