2

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

所以,给定: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]

我知道函数不能从表面上做到这一点,但这可以通过抽象层实现吗?

4

1 回答 1

7

当然,这是可能的:

fun test (f, x) = f x

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

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

于 2010-09-02T21:37:17.833 回答