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
是我的第一个猜测,我就是不知道怎么做。