功能编程 – 在函数式编程中是否还有任何代数结构,而不是单一的
我最近知道函数式编程(在Haskell和Scala中).它的功能和优雅是相当迷人.
但是当我遇到一个名叫Monoid的代数结构的Monads时,我很惊讶,很高兴看到我从数学中学到的理论知识在编程中得到了应用. 这个观察在我的脑海中引起了一个问题:组织,领域或环(参见Algebraic Structures为其他人)可以在编程中用于更多的抽象和代码重用目的,并实现数学相似的编程? 我知道,这个名为Fortress的语言(当编译器完成时,我一定会喜欢任何语言一次)在库代码中定义了这些结构.但是目前为止,我看到的仅仅是我们已经熟悉的数字类型.他们会有其他用途吗? 最好的祝福,
您可以建模许多结构.这是一个组:
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具有大量示例和应用程序. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |