【发布时间】:2015-12-07 03:37:41
【问题描述】:
有没有办法编写一个多态函数(在 sml 中),它使用与它所拥有的参数不同类型的参数来调用自己?
例如,我在看this answer,(它有声明datatype ('a,'b)alterlist = Nil| element of 'a*('b,'a)alterlist;),直观地,我想实现函数unzip,如:
fun unzip Nil = ([],[]) |
unzip (element(x,l)) = let val (b,a)=unzip l in (x::a,b) end;
类型推断系统将其理解为('a,'a) alterlist -> 'a list * 'a list,但我想要('a,'b) alterlist -> 'a list * 'b list 类型的东西(这样内部调用就是('b,'a) alterlist -> 'b list * 'a list)
【问题讨论】:
标签: recursion polymorphism sml