- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我不是数学家,但我觉得存在一些逻辑问题。
让我们从 ADT 原语开始,例如“unit”类型。它应该在类型集的上下文中扮演“1”的角色。但事实上,我们看到“unit”类型在C、C++等中经常被称为“void”等价物。同时我们在ADT中也有自己的“void”类型,它扮演着“0”的角色,实际上定义了自身的 NO 值。
对此的一些观点听起来像是“单元类型不带来任何信息,因此它是无用的,我们可以将其视为类似 void”。但是 C void 等价物在哪里呢?或者,void = 单位,“0=1”?带来一些悖论是个坏主意。
那么,让我们更深入地了解一下。单位类型只定义一个值,好吧。但是,为什么在ADT理论中
unit + unit = 2*unit
我们什么时候应该得到单位? “+”的作用类似于“或”,定义我们称为变体类型的类型。“单位或单位”绝对不会给我们“位”,或者任何更复杂的东西来继续。
提到 haskell 元组,它甚至没有单个元素的元组,但可以为空。所以这也是来自ADT理论。元组是项类型的乘法,因此一个元素元组与裸元素相同,空元组是单位值()。
a == (a) == ((a)) == ...
() == (()) == ...
所以,这里的一个悖论是:空元组的长度是多少?正如你所看到的,它的长度同时为零和一......
最佳答案
首先,我们需要忽略类似 C 的语言等:它们甚至不尝试匹配数学基础。
Haskell 和其他函数式语言确实尝试了这一点,虽然同构如何工作通常并不明显,但它们确实存在。
Then, lets go deeper. Unit type defines only one value, okay. But, why in ADT theory
unit + unit = 2*unit
when we should get unit? "+" works like "or" defining type that we know as variant types. "unit or unit" definitely doesn't give us "bits", or anything more complex to continue.
嗯,是的,它确实给了我们一些位。
type Bit = Either () ()
(||), (&&) :: Bit -> Bit -> Bit
(Left()) || (Left()) = Left()
_ || _ = Right()
(Right()) && (Right()) = Right()
_ && _ = Left()
如果您不相信它有效:
Prelude Acme.Missiles> type Bit = Either () ()
Prelude Acme.Missiles> let [true, false] = [Left (), Right ()] :: [Bit]
Prelude Acme.Missiles> if true==false then launchMissiles else return ()
Loading package stm-2.4.2 ... linking ... done.
Loading package acme-missiles-0.3 ... linking ... done.
Prelude Acme.Missiles>
啊,谢天谢地,我们还活着……
<小时/>至于“嵌套单元元组”:它们仅代表 1ⁿ ≡ 1
的事实。
当我们真正考虑零类型时,也许事情会变得更清楚。
{-# LANGUAGE EmptyDataDecls #-}
data Void
现在,让我们看一下最简单的情况:
(Void, Void) ≅ Void
类型的值。Either
提供了两个构造函数,但两者都需要我们无法提供的 Void
参数,因此我们仍然有 Either Void Void ≅ Void
。 (Void, ())
,因为我们无法为 fst
提供值。Left
,但我们可以构造Right()
!所以要么 Void () ≅ ()
,因为那是该类型的单个值。()
。Left ()
和 Right ()
。关于haskell - ADT 理论或者它在编程语言中的处理方式真的有问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20035326/
Google发布的ADT bundle 包的最终版本是什么? 由于宣布“Android Studio”为开发Android应用程序的正式IDE,因此ADT bundle 包(带有ADT插件和Andro
我在 Eclipse Indigo (3.7.2) 中更新我的 android ADT 插件时遇到了一个可怕的错误。请检查所附图片。 谢谢 最佳答案 遇到了类似的问题。这就是我修复它的方式。 1.从
我正在使用 ADT 包 22.3。这是我直接从 android.com 下载的完整离线压缩包。但现在他们已经将更新推送到 ADT bundle 22.6,所以在下载 ADT bundle 22.6 z
我用 C 语言创建了一个基于结构的抽象数据类型。在这个结构中,有指向同样基于结构的其他 ADT 的指针。我想知道如何/是否可以正确初始化内部指针并消除内存访问冲突错误。代码如下: typedef st
我想创建一棵树(使用 Node 或 ADT),其中每个节点都有一个指向其父节点的注释。下面是一个简单的链表数据结构的例子: import util::Math; import IO; import N
在 eclipse 上 - 尽管我使用的是最新的 adt 版本,但我还是收到了这个错误。我不确定它是否相关,但这发生在我安装 android-m sdk 之后。 最佳答案 从这里开始: https:/
我的应用程序运行良好。但是,一旦我从 ADT 16 更新到 ADT 17,就会收到此错误 Unable to resolve superclass of Lcom/my/app/MyActivity;
大家早上好 我是 SO 的新手,我问这个问题是因为我必须重新调整昨天的算法和编程考试。在 CodeBlocks 上输入我的考试时,我遇到了一个我无法修复的错误。基本上,考试要求从数据结构中的文件(格式
几乎没有人在 ADT 中成功导入 Apklib(aar) 引用。这是一个 issues ,但没有答案。在问题中,这是一个 solution有效但丑陋。 作为 ADT 的粉丝,我不想使用 Android
我遇到了从 安装 ADT 的问题 https://dl-ssl.google.com/android/eclipse/ 和 http://dl-ssl.google.com/android/eclip
在使用 Eclipse 开发时,尝试安装 hibernate、storm 和其他一些 ORM/DAO 生成器工具时,eclipse 停止正常工作。 我有两种错误:1 在构建它时说“运行 android
这个问题在这里已经有了答案: Update Eclipse with Android development tools v. 23 (43 个回答) 关闭8年前。 我从这个网站下载并安装了带有 an
我在创建 dynArray 并向其添加元素时遇到了问题。我不确定如何为它分配内存。我最近才开始提出建议,因此非常感谢您的帮助。 typedef struct{ doube *darray; i
假设我有一个 ADT 和类型类 Foo像这样: sealed trait A case class A1() extends A case class A2() extends A case clas
我正在使用 scala 驱动程序与 mongodb 进行 IO 操作。我的Scala版本是2.11.11 mongo db 驱动程序是 2.2.0 . 我以关于 ADT 的文档为例: sealed c
我正在尝试用 C++ 实现二叉搜索树(用于大学类(class)),但在访问我在 .h 文件中定义的结构时遇到了一些困难。 这是我的 .h 文件: class BST { protected:
我有两个空中应用程序并将它们安装在桌面上并执行它们,并且任务栏管理器中列出了两个空中进程。现在如何从另一个空中应用程序执行一个空中应用程序的某些方法? 最佳答案 使用LocalConnection .
我不是数学家,但我觉得存在一些逻辑问题。 让我们从 ADT 原语开始,例如“unit”类型。它应该在类型集的上下文中扮演“1”的角色。但事实上,我们看到“unit”类型在C、C++等中经常被称为“vo
在 C 中创建 ADT 时返回结构体指针的原因是什么?例如: typedef struct some_thing st_t; // system interface st_t* init_syste
更新到 ADT 22.3 后,出现此错误: [2013-11-09 17:56:27 - Dex Loader] Unable to execute dex: java.nio.BufferOverf
我是一名优秀的程序员,十分优秀!