Questions tagged «functional-programming»

函数式编程是一种范式,它试图通过对函数的链式评估来解决计算问题,这些函数的输出由输入决定,而不是由程序状态决定。在这种编程方式中,不赞成使用副作用和可变数据,并且通常严格隔离它们。

2
Haskell函数组合是管道和过滤器架构模式的实例吗?
管道和过滤器的架构模式定义为一系列处理元素,其排列方式是使每个元素的输出为next的输入。每个示例似乎都考虑通过某种共享缓冲区执行的进程间或线程间连接。 在我看来,Haskell函数组合正在执行相同的任务。我们能否说这只是此模式的一个实例,即使它只是关于函数排序,并且没有显式缓冲区用作管道?如果是,对于非惰性语言,我们可以说同样的话吗?


1
Rebol是一种功能编程语言吗?
我遇到了Rebol,我对此很纳闷。 我从这里遇到以下脚本: use [feed questions answers][ feed: load-xml/dom http://stackoverflow.com/feeds/tag/rebol questions: map-each entry feed/get-by-tag <entry> [ find/match entry/get <id> "http://stackoverflow.com/q/" ] answers: make block! length? questions foreach question questions [ question: load-xml/dom join http://stackoverflow.com/feeds/question/ question foreach entry next question/get-by-tag <entry> [append answers entry/tree] ] insert clear feed/find-element <entry> answers feed/flatten ] …

2
谁首先创造了术语高阶职能和/或头等公民?
我已经了解到,早在Haskell,O'Caml或LISP之前,高阶函数是一门学术研究主题,在数学中,Schönfinkel(1967年)和Haskell Curry(1968年)已经应用了诸如咖喱粉之类的技术,但是在任何编程语言中都没有。 根据Wikipedia的说法, Scheme 是引入适当的高阶函数作为一等公民的第一门语言,但是有人可以将原始想法归因于此吗?也许是1930年代发明了lambda演算的Alonzo Church?更具体地说,谁创造了以下定义,我在几本书和在线资源的各种释义中看到了以下定义? 当一个函数将另一个函数作为参数或返回一个函数时,该函数被认为是更高阶的。任何不将函数用作参数或返回类型的函数都称为一阶函数。

1
最好在monadic函数中使用带验证的错误monad,还是直接在绑定中实现带有验证的自己的monad?
我想知道对于可用性/可维护性而言,更好的设计明智之举,以及与社区相适应的更好之道。 给定数据模型: type Name = String data Amount = Out | Some | Enough | Plenty deriving (Show, Eq) data Container = Container Name deriving (Show, Eq) data Category = Category Name deriving (Show, Eq) data Store = Store Name [Category] deriving (Show, Eq) data Item = Item Name Container …

4
currying或部分应用有什么特别之处?
我每天都在阅读有关函数式编程的文章,并尝试尽可能地应用一些实践。但是我不明白在currying或部分应用程序中有什么独特之处。 以以下Groovy代码为例: def mul = { a, b -> a * b } def tripler1 = mul.curry(3) def tripler2 = { mul(3, it) } 我不了解tripler1和之间的区别tripler2。他们不是都一样吗?在纯或部分功能的语言(例如Groovy,Scala,Haskell等)中支持“ currying”。但是,我可以通过简单地创建另一个命名或匿名方法来做相同的事情(left-curry,right-curry,n-curry或部分应用程序)函数或闭包将tripler2大多数语言(甚至C)中的参数转发到原始函数(如) 我在这里想念什么吗?在某些地方可以在Grails应用程序中使用currying和Partial应用程序,但是我很犹豫这样做,因为我在问自己“那有什么不同?” 请赐教。 编辑:你们是说部分应用程序/ currying比创建/调用将默认参数转发到原始函数的另一个函数更有效吗?


1
函数分解真的是反模式吗?
当我阅读您遇到的最糟糕的反模式时,我单击了这篇文章中的链接以登陆有关反模式的网站。 而http://sourcemaking.com/antipatterns/functional-decomposition页让我疑惑。 这个反模式有多严重,它到底是反模式吗?因为,尽管我现在主要进行OOP编程,但我仍然不愿意反对纯Java的所有OOP语言以及它们带来的设计实践。而且我猜想,我在编写代码时仍具有函数式编程的一些特征。 这就提出了一个问题,我是坚持OOP + Functional风格做错了吗,还是在行业中很常见,实际上还不是那么糟糕。 我从经验中知道的是,OOP +功能样式与纯OOP开发人员并不完全兼容。但是,与此同时,尽管OOP开发人员在OOP +功能开发方面遇到问题,但反驳的是,OOP解决方案往往设计过度,难以使用,并且根据我的经验,甚至一点也不容易,实际上介绍了一些非常严重的错误可以隐藏的盲点。 因此,即使我与同事讨论了这些主题,但我得出的结论是,所有方法实际上都不是完美的。而且我仍然有未解决的问题。 另一个线程中来自另一个帖子的链接也加剧了OOP问题。链接着眼于Java风格的OOP http://chaosinmotion.com/blog/?p=622 那么将函数式编程与OOP混合的一般态度是什么?开发人员应努力实现什么平衡?

3
功能语言中的获取器和设置器
函数式编程的宗旨之一是使用纯函数。Pure函数是无副作用且参照透明的函数。 Getter并不是透明的-如果在两次Getter的调用之间调用了Setter,则即使Getter的参数没有(通常没有参数),它的返回值也会改变。 设置器会产生副作用-调用设置器通常会操纵不是其返回值的值(实际上,传统上,设置器不返回任何值) 我知道在Scala中,我们可以接受这样一个事实,即我们将两个范例(功能和面向对象)结合在一起,并像使用Java这样的语言时使用了getter / setter。 在像Haskell这样的语言(我不太会流利,但被告知对“纯”功能语言更真实)时,我很好奇,如何对对象的属性建模,以使Getters相对透明和Setters。有副作用吗? 解决方案是将调用设置器的对象的副本作为设置器的返回值传回,并且此副本包含对属性值的更改吗?

4
用于编写国际象棋引擎的范式是什么?
如果要编写国际象棋游戏引擎,您将使用哪种编程范例(OOP,过程等),为什么要选择它?象棋引擎是指程序的一部分,它可以评估当前板并确定计算机的下一个动作。 我问是因为我认为写象棋引擎可能很有趣。然后我想到可以将其用作学习函数式编程的项目。然后我想到有些问题不太适合功能范式。然后我想到这可能是很好的讨论饲料。
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.