10得票6回答
如何在TypeScript中模拟ADT和模式匹配?

很遗憾,截至0.9.5版,TypeScript还没有代数数据类型(联合类型)和模式匹配(用于解构它们)。更糟糕的是,它甚至不支持接口的 instanceof。您使用哪种模式来模拟这些语言特性,以实现最大的类型安全性和最小的样板代码?

10得票3回答
将地图约束表示为抽象数据类型(ADT)

以下是一个玩具问题: (Roguelike)2D地图由正方形单元格组成,每个单元格都有一种材料(岩石或空气)。 每个单元格都有四条边界(N,S,E和W)。 每个边界由两个单元格共享。 当一侧为岩石,另一侧为空气时,边界可以选择包含“墙体特征”。 (墙体特征可以是杠杆、图片、按钮等) ...

10得票6回答
Java中的ADT样式多态性(无需更改类)

在Haskell中,我可以定义以下数据类型: data Tree = Empty | Leaf Int | Node Tree Tree 然后编写多态函数,如下所示: depth :: Tree -> Int depth Empty = 0 depth ...

10得票1回答
如何展示Rust类型系统支持代数数据类型(ADTs)?

维基百科的编程语言代数数据类型(ADTs)列表表明Rust确实具有ADT,但我不确定我对于为什么这对于Rust是正确的解释是否正确。据我所知,要说某个语言拥有ADT,则需要具备以下条件: 价值观: - 零(或Void) - Rust中的! - 一个未获得任何值的类型。 - 一(或单位) -...

9得票2回答
如何编写一个与树同构且没有嵌套列表的类型?

在Haskell中,有一种说法是任何ADT都可以表示为和积。我正在尝试找到一个等同于 Data.Tree 上的 Tree 的平坦类型。 Tree a = Node a [Tree a] -- has a nested type (List!) 我希望写出与Tree的嵌套类型功能相同的定义...

9得票1回答
没有构造函数的代数数据类型的目的是什么?

在Haskell中,您可以定义一个没有构造函数的代数数据类型: data Henk 但是,如果一个类型(或种类)没有构造函数,那么它的目的是什么呢?

9得票1回答
一个 Haskell 类型构造器仅仅是一个函数吗?

我正在学习《Haskell编程原理》这本书,其中有一道练习要求判断以下代码 [稍做修改] 是否合法: module Test where type Subject = String type Verb = String type Object = String data Sentence...

9得票3回答
用Java模拟ADT

一个应用程序可以分为两种模式——“实时”模式和“采样”模式。在“实时”模式下,它会监视世界状态的每一次更新;而在“采样”模式下,它只会在每 T 毫秒查看一次世界状态。 如果我在写 Haskell(或者任何支持 ADTs 的语言),我会将其建模为: data Mode = RealTime ...

9得票3回答
除了和积类型和和积类型,还有其他代数数据类型吗?

按照要求翻译的结果如下: 根据大多数定义,Haskell或Scala中常见的基本代数数据类型是总和和乘积。例如:1, 2。 有时候定义只是简单地说代数数据类型是总和和乘积,可能是为了简单起见。 然而,这些定义给人留下了其他代数数据类型也是可能的印象,而总和和乘积只是最有用的描述元素选择或...

9得票2回答
ADT名称:Haskell中的“Left a”是什么,然后“a”又是什么?

如果我有一个Haskell ADT,例如: data Foo = A Int Double | B Bool [Integer] | C (Maybe String) Float A、B和C被称为数据构造器,有时也被称为值构造器。但是以下术语的正确名称是什么: "行/替代项":...