我需要根据传递给另一个函数的函数返回一个不同的值。
所以,给定: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]
我知道函数不能以表面的方式做到这一点,但是这可以通过抽象层来实现吗?
答案 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) xs
或val double = map (fn x -> x*2)
。