Function 标准ML:返回不同的类型

Function 标准ML:返回不同的类型,function,functional-programming,sml,ml,Function,Functional Programming,Sml,Ml,我需要根据传递给另一个函数的函数返回不同的值 因此,给定:fun inc x=x+1 和:fundoull[]=[]|double(h::t)=2*h::double(t) 您应该能够调用我正在使用的函数 示例调用(我正在执行的函数名为test): 测试(inc,5)-它将返回6 -或- 测试(双[1,2,3,4])-它将返回[2,4,6,8] 我知道函数不能从表面上做到这一点,但这可能通过抽象层实现吗?当然,这是可能的: fun test (f, x) = f x test现在的类型是(('

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

因此,给定:
fun inc x=x+1

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

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

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

测试(inc,5)-它将返回6

-或-

测试(双[1,2,3,4])-它将返回[2,4,6,8]

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

当然,这是可能的:

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


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

,即使有办法-如果答案是,你可能问错了问题。为什么你认为你需要它,为什么你不能使用
map
和单例列表?这就是我说的“抽象”的意思。使用
map
是我的第一个猜测,我就是不知道怎么做。