首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sml类型混淆

Sml类型混淆
EN

Stack Overflow用户
提问于 2013-12-12 19:44:14
回答 1查看 75关注 0票数 0

我的职能是:

代码语言:javascript
复制
fun x (u,v,w) = (u::[v])::w;

的返回类型

代码语言:javascript
复制
fn: 'a * 'a * 'a list list -> 'a list list

有人能向我解释这种类型是如何从函数中产生的吗?谢谢!

编辑:还有,我如何调用这个函数?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-12 20:45:43

::采用两个参数--一个在左边,一个在右边。如果它的左参数是t类型,那么它的右参数必须是t list类型。

因此,::具有('a * 'a list) -> 'a list类型,因为t是任意的,因此由'a表示。

因此,当您拥有代码(u::[v])时,您将告诉SML u : t'v : t用于某种类型的t。这个表达式就是一个t list,因此要将它用作::的左参数,右参数w必须具有t list list类型。

这就给出了(u::[v])::w的类型是t list list,对于某些t

总结如下:

u : t

v : t

w : t list

(u::[v])::w : t list list

都是为了某种类型的t

因此,x的类型是('a * 'a * 'a list) -> 'a list list,因为t是任意的。

要调用这个函数,您可以执行类似于x(1,2,[3,4])的操作,这将给列表[[1,2],[3,4]]

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20552753

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档