在Perl中实现函数式编程

ppa*_*ant 19 perl haskell functional-programming

我正在尝试学习像Haskell这样的纯函数式编程语言,因为我来自Perl背景,并且读到Perl也可以实现函数式编程技术.很少有人提出这样的问题:

  • 是否值得在Perl 5中做到这一点?
  • Perl 6会有所作为吗?
  • 任何人都可以建议在Perl中实现函数式编程技术的一些代码/示例吗?

  • mus*_*iKk 47

    阅读高阶Perl.您可以购买免费下载.它甚至为经验丰富的Perl程序员提供了见解.

    • 谢谢.一个upvote是不够的.:) (2认同)

    Bra*_*sie 6

    perl6仍然是一项正在进行中的工作,所以即使perl6在语言级别上对函数式编程有很多改进的支持(例如,参见perl6中的perlgeek.de),你可能现在想要从perl5开始,这样你就可以了开始研究那里的东西.我建议查看cpan以获得更高级别的库支持... Array :: Utils和其他(有很多!)


    jro*_*way 5

    函数式编程只是编程,你可以用任何语言编写.如果您喜欢Haskell API的布局方式,您可能会喜欢我的Data :: Monad模块,它为包括Monad在内的各种Haskell类型类提供Moose角色.(与Haskell不同,我的Monad中没有"失败",所有Monads都是Functors.)

    下面是在处理成功或失败的数据结构(如Control.Monad.Error)的上下文中运行各种类型类的示例:

    http://github.com/jrockway/data-monad/blob/master/t/error.t

    请注意,它能够将可能因异常而失败的常规Perl计算转换为可以bind执行其他过程的纯过程.这使得"常规Perl"在一个旨在具有更多功能控制流程的程序中工作.

    • 关于"你可以用任何语言做",我不同意.嗯......你可以用任何语言来做,但是如果代码更难/更长,你就可以了.在某些时候,语法很重要.这篇博文http://enfranchisedmind.com/blog/posts/scala-not-functional/清楚地说明了这一点.但是,我不知道Perl如何处理这个问题. (7认同)
    • 是的,Haskell和OCaml有一个无语法的函数应用程序运算符.然而,这并不是使Haskell中的编程成为"函数式编程"的原因. (2认同)
    • 当然重要.没有模式匹配,currying,高阶函数,迭代器和理解,不可变集合和不可变数据类型,懒惰......它不再是函数式编程了!它们中的大多数只是语法糖,但从某种意义上说,所有编程语言都是语法糖! (2认同)