功能编程 – 在函数式编程中是否还有任何代数结构,而不是单一的?

栏目: 编程语言 · 发布时间: 6年前

内容简介:http://stackoverflow.com/questions/3331287/is-there-any-algebraic-structures-used-in-functional-programming-other-then-mono

我最近知道函数式编程(在Haskell和Scala中).它的功能和优雅是相当迷人.

但是当我遇到一个名叫Monoid的代数结构的Monads时,我很惊讶,很高兴看到我从数学中学到的理论知识在编程中得到了应用.

这个观察在我的脑海中引起了一个问题:组织,领域或环(参见 Algebraic Structures 为其他人)可以在编程中用于更多的抽象和代码重用目的,并实现数学相似的编程?

我知道,这个名为 Fortress 的语言(当编译器完成时,我一定会喜欢任何语言一次)在库代码中定义了这些结构.但是目前为止,我看到的仅仅是我们已经熟悉的数字类型.他们会有其他用途吗?

最好的祝福,

ciun

您可以建模许多结构.这是一个组:

class Group a where
    mult :: a -> a -> a
    identity :: a
    inverse :: a -> a

instance Group Integer where
    mult = (+)
    identity = 0
    inverse = negate

-- S_3 (group of all bijections of a 3-element set)
data S3 = ABC | ACB | BAC | BCA | CAB | CBA
instance Group S3 where
    mult ABC x = x
    ... -- some boring code
    identity = ABC
    inverse ABC = ABC
    ... -- remaining cases

-- Operations on groups. Dual:
data Dual a = Dual { getDual :: a }
instance Group a => Group (Dual a) where
    mult (Dual x) (Dual y) = Dual (mult y x)
    identity = Dual identity
    inverse (Dual x) = Dual (inverse x)

-- Product:
instance (Group a, Group b) => Group (a,b) where
    mult (x,y) (z,t) = (x `mult` z, y `mult` t)
    identity = (identity, identity)
    inverse (x,y) = (inverse x, inverse y)

现在,您可以编写多(双CAB,5)(双CBA,1)并获得结果.这将是组S3 *⨯Z中的计算.您可以添加其他组,以任何可能的方式组合它们,并与它们进行计算.

类似的事情可以通过环,字段,排序,向量空间,类别等来完成.Haskell的数字层次结构不幸的是被模仿,但是有一个 numeric prelude 尝试修复它.还有 DoCon 把它带到极限.对于类型课程(主要由类别理论推动),有 Typeclassopedia 具有大量示例和应用程序.

http://stackoverflow.com/questions/3331287/is-there-any-algebraic-structures-used-in-functional-programming-other-then-mono


以上所述就是小编给大家介绍的《功能编程 – 在函数式编程中是否还有任何代数结构,而不是单一的?》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

深入理解LINUX网络技术内幕

深入理解LINUX网络技术内幕

Christian Benvenuti / 夏安、闫江毓、黄景昌 / 中国电力出版社 / 2009-6 / 128.00元

Linux如此的流行正是得益于它的特性丰富及有效的网络协议栈。如果你曾经惊叹于Linux能够实现如此复杂的工作,或者你只是想通过现实中的例子学习现代网络,《深入理解Linux网络内幕》将会给你指导。同其他O'Reilly的流行书籍一样,《深入理解Linux网络内幕》清楚地阐述了网络的基本概念,并指导你如何用C语言实现。虽然早先的 TCP/IP经验是有用的,但初学者通过《深入理解Linux网络内幕》......一起来看看 《深入理解LINUX网络技术内幕》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具