【问题标题】:Number of functions in expression - SML表达式中的函数数 - SML
【发布时间】:2016-02-06 09:35:18
【问题描述】:

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

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

另外,你将如何实现一个函数来返回这种类型?我创建了一些函数,例如:

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

我是这样创建的:

fun function x y = (x,y);

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

感谢您的帮助!

【问题讨论】:

  • 对不起,我已经意识到我做了什么,我的意思是函数 x y = (x,y)
  • 我已经编辑了我的问题
  • 我删除了我的评论...
  • 我已经找到答案了。为了能够做到这一点,我必须将每个输入转换为 alpha
  • 不是"cast",你只需要指定类型。 SML 不“进行”强制转换。

标签: function sml smlnj


【解决方案1】:

为了能够有两个相同 alpha 类型的输入,我必须将两个输入的类型指定为 alpha。

例如

fun function (x:'a) (y:'a) = (x, y);

==>

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

【讨论】:

  • 这是一个很好的答案。没有对类型的任何假设,除了形成元素从传递的 2 中提取的元组之外,你真的无能为力。很容易看出,给定类型只有 4 个不同的多态纯函数。
【解决方案2】:

假设这是作业,我不想说太多。类型表达式中的-> 表示一个函数。 'a -> 'a -> ('a * 'a) 有两个箭头,所以 2 可能 是您第一个问题的答案,尽管我发现那个特定的问题晦涩难懂。可以提出一个论点,即每个fun 只定义了一个函数,该函数可能恰好为其输出返回一个函数。此外,您问“表达式中存在多少函数...”,然后给出一个字符串,其中实际上有 0 个函数(类型描述 describe 函数但不 contain 函数),所以答案可能是 0。

如果您想要int -> int -> int * int 的自然示例,您可以实现函数divmod,其中divmod x y 在将x 除以y 时返回由商和余数组成的元组。例如,您希望 divmod 17 5 返回 (3,2)。这是 Python 中的内置函数,而不是 SML 中的内置函数,但可以使用内置运算符 divmod 在 SML 中轻松定义。生成的函数将具有'a -> 'a -> 'a*'a 形式的类型——但对于特定 类型(即int)。您必须做一些不太自然的事情(例如您在回答问题时所做的事情)才能提出多态示例。

【讨论】:

    猜你喜欢
    • 2021-01-23
    • 1970-01-01
    • 2013-01-13
    • 1970-01-01
    • 2020-08-16
    • 2012-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多