Questions tagged «algebraic-data-types»

7
滥用代数数据类型的代数-为什么这样做有效?
对于具有数学背景的人来说,代数数据类型的“代数”表达式非常有启发性。让我尝试解释一下我的意思。 定义了基本类型 产品 • 联盟 + 辛格尔顿 X 单元 1 并使用简写X²的X•X和2X对X+X等等,我们就可以定义,例如链表代数表达式 data List a = Nil | Cons a (List a) ↔ L = 1 + X • L 和二叉树: data Tree a = Nil | Branch a (Tree a) (Tree a) ↔ T = 1 + X • T² …

8
您如何在Haskell中表示图?
使用代数数据类型很容易在haskell中表示树或列表。但是,您将如何以印刷方式表示图形?看来您需要指针。我猜你可能会喜欢 type Nodetag = String type Neighbours = [Nodetag] data Node a = Node a Nodetag Neighbours 那将是可行的。但是,感觉有点分离。结构中不同节点之间的链接并不像列表中当前的上一个元素和下一个元素之间的链接或树中节点的父级和子级之间的链接那样“牢固”。我有一种预感,即在我定义的图形上进行代数运算会受到标记系统引入的间接级别的影响。 正是这种怀疑和对自卑的感觉使我提出了这个问题。在Haskell中是否存在一种更好/更数学上优雅的图形定义方法?还是我偶然发现了一些本来就困难/基本的东西?递归数据结构很不错,但这似乎是另外一回事。与树和列表如何自引用不同意义上的自引用数据结构。就像列表和树在类型级别是自引用的,而图在值级别是自引用的。 那么到底是怎么回事?

2
Haskell数据类型的内存占用量
如何找到在Haskell中存储某种数据类型的值所需的实际内存量(主要是GHC)?是否可以在运行时(例如在GHCi中)对其进行评估,还是可以从其组件中估算复合数据类型的内存需求? 通常,如果已知类型a和的内存要求b,则代数数据类型的内存开销是多少,例如: data Uno = Uno a data Due = Due a b 例如,这些值占用多少字节内存? 1 :: Int8 1 :: Integer 2^100 :: Integer \x -> x + 1 (1 :: Int8, 2 :: Int8) [1] :: [Int8] Just (1 :: Int8) Nothing 我知道实际的内存分配是由于延迟垃圾回收而导致的。由于懒惰的评估,它可能有很大的不同(并且thunk的大小与值的大小无关)。问题是,在给定数据类型的情况下,充分评估其值会占用多少内存? 我发现:set +sGHCi中有一个选项可以查看内存统计信息,但是目前尚不清楚如何估算单个值的内存占用量。

3
如何使Haskell函数尽可能短?
该season函数使用代数函数,但是我觉得代码是重复的。 如何使它尽可能短? data Month = Jan | Feb | Mar | Apr | May | June | July | Aug | Sept| Oct | Nov | Dec deriving (Eq,Ord,Show,Read) data Seasons = Spring | Summer | Autumn | Winter deriving (Eq,Ord,Show,Read) season :: Month -> Seasons season Jan = Winter …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.