function - PolyML 函数和类型

标签 function types sml polyml

[...] a pair of functions tofun : int -> ('a -> 'a) and fromfun : ('a -> 'a) -> int such that (fromfun o tofun) n evaluates to n for every n : int.

谁能向我解释一下这实际上要求什么?我正在寻找更多对此的解释,而不是实际的解决方案。

最佳答案

这要求的是:

1) 一个高阶函数 tofun,当给定一个整数时,它返回一个多态函数,其类型为 'a->'a,这意味着它可以适用于任何类型的值,返回相同类型的值。此类函数的示例是:

- fun id x = x;
val id = fn : 'a -> 'a

例如,id "cat"= "cat"id () = ()。后面的值是unit类型,是只有1个值的类型。请注意,从 unitunit 总共只有 1 个函数(即 id 或类似的东西)。这强调了定义 tofun 的难度:它返回一个 'a -> 'a 类型的函数,除了恒等函数之外很难想到其他功能。另一方面,此类函数可能无法终止或可能引发错误,但仍具有类型 'a -> 'a

2) fromfun 应该采用 'a ->'a 类型的函数并返回一个整数。所以例如fromfun id 的计算结果可能为 0(或者如果您想变得棘手,它可能永远不会终止或可能引发错误)

3) 这些应该是彼此相反的,因此,例如fromfun (tofun 5) 需要计算为 5。

直观上,这在足够纯粹的函数式语言中应该是不可能的。如果在 SML 中可行,我的猜测是,这将是通过使用 SML 的一些不纯粹的功能(允许副作用)来违反引用透明度。或者,这个技巧可能涉及引发和处理错误(这也是 SML 的一个不纯粹的功能)。如果你找到一个在 SML 中有效的答案,那么看看它是否可以被翻译成烦人的纯函数语言 Haskell 将会很有趣。我的猜测是它不会翻译。

关于function - PolyML 函数和类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40793384/

相关文章:

python-3.x - 如何让我的函数返回引用以外的内容?

haskell - 单子(monad)绑定(bind)的显式签名约束

typescript - 尝试实现通用规范和访问者模式时,类型不满足约束并错误地扩展接口(interface)

javascript - 有没有办法利用 MLton 将标准 ML 编译为 JavaScript?

R 编程帮助编写函数

function - 将函数结果分配给SQL变量并显示

c++ - 为什么编译器可以通过引用传递和值传递来重载函数

scala - scala 中具有不同类型参数的 Varargs

sml - 处理不属于数据类型的变量

sml - 如何在 SML 的 let 绑定(bind)中编写相互递归的函数?