表达式中的函数数量 - SML

时间:2015-11-05 13:57:17

标签: function sml smlnj

此表达式中有多少个函数? :

'a -> 'a -> ('a*'a)

另外,如何实现返回此类型的函数?我已经创建了具有例如:

的函数
'a -> 'b -> ('a * b)

我通过以下方式创建了这个:

fun function x y = (x,y);

但是我尝试使用两个x输入,并且在尝试输出第一个类型表达式时出错。

感谢您的帮助!

2 个答案:

答案 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 yx除{y后返回由商和余数组成的元组。 {1}}。例如,您希望divmod 17 5返回(3,2)。这是Python中的内置函数,但不是SML中的函数,但可以使用内置运算符divmod在SML中轻松定义。生成的函数将具有'a -> 'a -> 'a*'a形式的类型 - 但对于特定的类型(即int)。你需要做一些不太自然的事情(例如你在回答问题时所做的事情)来提出一个多态的例子。