此表达式中有多少个函数? :
'a -> 'a -> ('a*'a)
另外,如何实现返回此类型的函数?我已经创建了具有例如:
的函数'a -> 'b -> ('a * b)
我通过以下方式创建了这个:
fun function x y = (x,y);
但是我尝试使用两个x输入,并且在尝试输出第一个类型表达式时出错。
感谢您的帮助!
答案 0 :(得分:1)
为了能够有两个相同alpha类型的输入,我必须指定两个输入到alpha的类型。
E.g
fun function (x:'a) (y:'a) = (x, y);
==>
a' -> 'a -> (a' * 'a)
答案 1 :(得分:1)
假设这是家庭作业,我不想说太多。类型表达式中的->
表示函数。 'a -> 'a -> ('a * 'a)
有两个箭头,所以2 可能是第一个问题的答案,尽管我发现这个特定的问题模糊不清。可以建立一个参数,即每个fun
只定义一个函数,这可能会为其输出返回一个函数。另外,你要问"表达式中有多少个函数......"但是然后给出一个字符串,字面上有0个函数(类型描述描述函数,但不要包含函数),所以答案可能是0。
如果你想要一个int -> int -> int * int
的自然例子,你可以实现divmod
函数,其中divmod x y
在x
除{y
后返回由商和余数组成的元组。 {1}}。例如,您希望divmod 17 5
返回(3,2)
。这是Python中的内置函数,但不是SML中的函数,但可以使用内置运算符div
和mod
在SML中轻松定义。生成的函数将具有'a -> 'a -> 'a*'a
形式的类型 - 但对于特定的类型(即int
)。你需要做一些不太自然的事情(例如你在回答问题时所做的事情)来提出一个多态的例子。