gpt4 book ai didi

haskell - 函数式编程中的代数结构是什么?

转载 作者:行者123 更新时间:2023-12-03 15:11:48 25 4
gpt4 key购买 nike

我一直在对函数式编程概念和想法进行一些简单的阅读。到目前为止,非常好,我已经阅读了三个主要概念:代数结构、类型类和代数数据类型。我对什么是代数数据类型有相当好的理解。我认为总和类型和产品类型相当简单。例如,我可以想象创建一个像 Card 这样的代数数据类型。 type 是由两个枚举类型组成的产品类型,Suit (有四个值和符号)和Rank (有 13 个值和符号)。
但是,我仍然对试图准确理解代数结构和类型类是什么感到不满。我脑子里只有一个表面层次的画面,但不能完全理解,例如,不同类型的代数结构,如仿函数、幺半群、单子(monad)等。这些到底有什么不同?它们如何在编程环境中使用?类型类与常规类有何不同?谁能至少给我指出一本关于抽象代数和函数式编程的好书的方向?有人建议我学习 Haskell,但我真的需要学习 Haskell 才能理解函数式编程吗?

最佳答案

"algebraic structure"是一个远远超出编程的概念,它属于数学。
想象一下所有可能的数学对象深不可测的深海。每个条纹的数字(naturalsrealsp-adic 数字...),还有字母序列,graphs , trees , symmetries of geometrical figures ,以及它们之间的所有定义明确的转换和映射。还有很多。
我们可以尝试通过指定条件,向这片海域“撒网”,只保留其中的一些实体。就像“事物的集合,其中有一个操作将其中两个事物组合成相同类型的第三个事物,并且该操作是关联的”。我们可以给这些条件起自己的名字,比如,"semigroup" . (因为我们谈论的是高度抽象的东西,所以很难选择一个描述性的名称。)
这忽略了数学“海洋”的许多居民,但描述仍然适合他们中的很多人!许多事物的集合是半群。例如,带有乘法运算的自然数,以及带有连接的非空字母列表,或 symmetries of a square with composition .
您可以使用额外的条件扩展您的描述。就像“一个半群,还有一个元素,它与任何其他元素相结合得到另一个元素,不变”。这限制了符合描述的数学实体的数量,因为您需要更多的数学实体。一些有效的半群将 lack"neutral element" .但是很多数学实体仍然会满足扩展描述。如果你不小心,你可以声明条件如此严格,以至于没有任何可能的数学实体能够真正适合它们!在其他时候,您可以精确到 only one实体适合他们。
纯粹使用这些数学实体的描述,仅使用我们需要的一般属性,我们可以获得unexpected results关于它们,乍一看并不明显,结果将适用于所有符合描述的实体。将这些发现视为“代码重用”的数学等价物。例如,如果我们知道某些事物的集合是半群,那么我们可以使用 binary exponentiation 计算指数。而不是繁琐地将事物与自身结合n次。但这仅适用于 associative property的半群操作。

关于haskell - 函数式编程中的代数结构是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63655414/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com