【问题标题】:why there are |b|^|a| inhabitants in the function a->b.how it comes? why it is not just "a" inhabitants为什么会有|b|^|a|函数a->b中的居民。它是怎么来的?为什么它不仅仅是“一个”居民
【发布时间】:2019-06-01 02:13:40
【问题描述】:

为什么会有|b|^|a|函数 a->b 中的居民 我认为它应该是其中的“a”居民,因为 a 是任何类型。不明白为什么不是。

【问题讨论】:

  • 你为什么认为有|a|首先是居民?
  • 我投票结束这个问题,因为它不是关于 Haskell 或一般编程的问题,而是关于数学的问题。如果尚未询问,请尝试在 Mathematics stack exchange 上询问。
  • @RobinZigmond “居民”在这里是一个合适的词。至于函数的相同性,在这种情况下,这通常意味着外延相等,即每个参数都具有相同的值。另请参阅Abusing the algebra of algebraic data types - why does this work?
  • @littlefish 不,ab 在这里表示集合,这就是为什么您使用众所周知的集合符号 |a| 来表示集合 a 的基数。这可能适用于 Haskell 类型的事实是偶然的;这可以应用于任何类型的编程语言,甚至数学函数。
  • @AJFarmar 恕我直言,我认为 OP 可能知道他们自己的问题是什么。

标签: haskell


【解决方案1】:

我们来说一个具体的例子,即下面两种具体类型上的函数:

data Three = A | B | C
data Four = OneFish | TwoFish | RedFish | BlueFish

Three -> Four 类型的函数可以通过为每个输入 ABC 选择 Four 类型的四个可能值之一来完全指定;这是一个例子:

f A = TwoFish
f B = BlueFish
f C = OneFish

这是另一个例子;它就像f,只是它为C做出了不同的选择:

g A = TwoFish
g B = BlueFish
g C = BlueFish

由于A有四种输出选择,B有四种输出选择,C有四种输出选择,因此有4*4*4 = 64种可能的功能选择。

现在我们可以概括一下并讨论其他有限输入类型上的总函数。和以前一样,从ab 的函数可以通过告诉它为每个输入a 选择哪个b 来完全指定。在我们为每个输入有 4 个可能的输出之前,现在有|b|-这些选择中的每一个都有许多可能性。和以前一样,由于选择是完全独立的,我们必须为每个可能的输入乘以 |b| 一次 - 即 |a| - 很多次。也就是说,我们有|b|^|a| 可能的完整规范。

【讨论】:

    猜你喜欢
    • 2014-03-29
    • 2011-05-30
    • 1970-01-01
    • 2018-11-22
    • 2019-08-07
    • 2021-10-06
    • 2019-10-27
    • 2010-12-08
    • 2011-12-18
    相关资源
    最近更新 更多