Recursion SML:调用自身另一个实例化的多态函数
有没有一种方法可以编写一个多态函数(在sml中),它使用不同类型的参数来调用自己 例如,我正在查看,(它具有声明Recursion SML:调用自身另一个实例化的多态函数,recursion,polymorphism,sml,Recursion,Polymorphism,Sml,有没有一种方法可以编写一个多态函数(在sml中),它使用不同类型的参数来调用自己 例如,我正在查看,(它具有声明数据类型('a,'b)alterlist=Nil |元素'a*('b,'a)alterlist;),直观地说,我想实现函数解压,如下所示: fun unzip Nil = ([],[]) | unzip (element(x,l)) = let val (b,a)=unzip l in (x::a,b) end; 类型推断系统将其理解为('a,'a)alterlist->'a
数据类型('a,'b)alterlist=Nil |元素'a*('b,'a)alterlist;
),直观地说,我想实现函数解压
,如下所示:
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
(这样内部调用是a('b,'a)alterlist->'b list*'a list
)类型的东西。我相信你想要的是,这不是在标准ML中实现的
然而,这是在Haskell中实现的(正如@seanmcl所指出的,ocaml):
导入前奏隐藏(解压缩)
数据变更列表a b=Nil |元素a(变更列表b a)
解压::Alterlist a b->([a],[b])
解压Nil=([],[])
解压(Elem x l)=
让(b,a)=解压l
in(x:a,b)
x=元素1(元素真(元素5(元素假零)))
*主>解压x
([1,5],[True,False])
ocaml也支持多态递归