Questions tagged «functional-programming»

函数式编程是一种基于使用函数构建抽象,避免副作用和状态改变的编程范例。纯函数式编程是线程安全的。



18
什么是(功能性)反应式编程?
已锁定。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 我已经阅读了有关反应式编程的Wikipedia文章。我还阅读了有关函数式反应式编程的小文章。描述非常抽象。 函数式反应式编程(FRP)在实践中意味着什么? 反应式编程(与非反应式编程相对)由什么组成? 我的背景是使用命令式/ OO语言的,因此希望了解与该范例有关的解释。

30
对象的映射功能(而不是数组)
我有一个对象: myObject = { 'a': 1, 'b': 2, 'c': 3 } 我正在寻找一种本机方法,Array.prototype.map该方法类似于以下方法: newObject = myObject.map(function (value, label) { return value * value; }); // newObject is now { 'a': 1, 'b': 4, 'c': 9 } JavaScript是否map对对象具有这样的功能?(我想为Node.JS使用它,所以我不在乎跨浏览器的问题。)

28
函数式编程会取代GoF设计模式吗?
自从我去年开始学习F#和OCaml以来,我已经阅读了大量文章,这些文章坚持认为设计模式(尤其是Java语言)是命令式语言中缺少功能的变通方法。我发现一篇文章提出了相当有力的主张: 我遇到的大多数人都阅读 过《四人帮》(GoF)的《设计模式》一书。任何自以为是的程序员都会告诉您,该书与语言无关,并且无论您使用哪种语言,该模式通常适用于软件工程。这是一个崇高的主张。不幸的是,它与事实相去甚远。 函数式语言极富表现力。在一种功能性语言中,因为该语言可能非常高级,所以不需要设计模式,因此您最终只能使用可以消除所有设计模式的概念进行编程。 函数式编程(FP)的主要功能包括一流的功能,柯里化的,不变的值等。在我看来,OO设计模式无法近似所有这些功能。 此外,在支持OOP的功能语言(例如F#和OCaml)中,对我来说显而易见的是,使用这些语言的程序员将使用与其他OOP语言相同的设计模式。实际上,现在我每天都使用F#和OCaml,并且在这些语言中使用的模式与在用Java编写时使用的模式之间没有显着差异。 函数式编程消除了对OOP设计模式的需求,这有何道理?如果是这样,您是否可以发布或链接到典型的OOP设计模式及其等效功能的示例?


14
列表理解与lambda +过滤器
我碰巧发现自己有一个基本的过滤需求:我有一个列表,并且必须按项目的属性对其进行过滤。 我的代码如下所示: my_list = [x for x in my_list if x.attribute == value] 但是后来我想,这样写会更好吗? my_list = filter(lambda x: x.attribute == value, my_list) 它更具可读性,并且如果需要性能,可以将lambda取出以获取收益。 问题是:使用第二种方法是否有警告?有任何性能差异吗?我是否完全想念Pythonic Way™,应该以另一种方式来做到这一点(例如,使用itemgetter而不是lambda)吗?

6
您不了解Hindley-Milner的哪一部分?
我发誓曾经有一件不朽的字样出售的T恤: 哪一部分 你不明白吗 就我而言,答案将是……全部! 特别是,我经常在Haskell论文中看到这样的符号,但是我不知道它的含义。我不知道它应该是数学的哪个分支。 我当然知道希腊字母的字母和诸如“∉”之类的符号(通常表示某些东西不是集合的元素)。 另一方面,我以前从未见过“⊢”(维基百科声称这可能意味着“分区”)。我也不熟悉这里使用的vinculum。(通常情况下,它表示一个级分,但是这并不出现在这里是这种情况。) 如果有人至少可以告诉我从哪里开始寻找理解符号海的含义的方法,那将是有帮助的。


4
函数式编程与面向对象的编程
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 3年前关闭。 到目前为止,我主要接触过OO编程,并期待学习一种功能语言。我的问题是: 什么时候选择函数编程而不是面向对象? 函数编程是更好的选择,典型的问题定义是什么?

15
Haskell入门
这个问题的答案是社区的努力。编辑现有答案以改善此职位。它目前不接受新的答案或互动。 几天来,我一直试图围绕Haskell的函数式编程范例。我通过阅读教程和观看截屏视频来做到这一点,但似乎没有任何坚持。现在,在学习各种命令式/ OO语言(例如C,Java,PHP)时,练习已经成为我的理想选择。但是由于我真的不知道Haskell的功能,并且因为要使用许多新概念,所以我不知道从哪里开始。 那么,您是如何学习Haskell的?是什么让您真正“破冰”?另外,对于开始练习有什么好主意吗?



13
时间函数在函数编程中如何存在?
我不得不承认我对函数式编程并不了解。我从这里到那里都读到它,因此知道在函数式编程中,无论调用多少次,函数对于相同的输入都会返回相同的输出。就像数学函数一样,该函数针对函数表达式中涉及的输入参数的相同值求出相同的输出。 例如,考虑一下: f(x,y) = x*x + y; // It is a mathematical function 无论您使用多少次f(10,4),它的价值始终是104。这样,无论您在何处编写f(10,4),都可以将其替换为104,而无需更改整个表达式的值。此属性称为表达式的引用透明性。 由于维基说(链接) 相反,在功能代码中,函数的输出值仅取决于输入到该函数的参数,因此,用参数x的相同值两次调用函数f会两次产生相同的结果f(x)。 函数编程中是否可以存在时间函数(返回当前时间)? 如果是,那么它怎么存在?它不违反功能编程的原理吗?它特别违反了引用透明性,而引用透明性是函数式编程的特性之一(如果我正确理解的话)。 否则,如何知道函数式编程的当前时间?

8
在Haskell进行大规模设计?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 3年前关闭。 已锁定。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 设计/构造大型功能程序的好方法是什么,尤其是在Haskell中? 我已经看过很多教程(我最喜欢编写自己的方案,紧随其后的是Real World Haskell)-但是大多数程序相对较小,而且用途单一。另外,我认为其中一些并不特别优雅(例如WYAS中庞大的查找表)。 我现在想编写更大的程序,并且要有更多的活动部分-从各种不同的来源获取数据,对其进行清理,以各种方式对其进行处理,在用户界面中显示它,对其进行持久化,通过网络进行通信等。一种最佳的结构,使代码清晰,可维护并适应不断变化的需求? 有大量的文献针对大型面向对象的命令式程序解决了这些问题。诸如MVC,设计模式之类的想法是实现OO风格的广泛目标(如关注点分离和可重用性)的合适处方。此外,较新的命令式语言使其具有“随您成长而设计”的重构风格,在我新手看来,Haskell似乎不太适合这种风格。 Haskell是否有等效的文献?如何最好地在功能编程(单子,箭头,应用程序等)中使用奇异控制结构的动物园?您可以推荐哪些最佳做法? 谢谢! 编辑(这是唐·斯图尔特的回答的后续内容): @dons提到:“ Monads以类型捕获关键的架构设计。” 我想我的问题是:如何用一种纯粹的功能语言思考关键的建筑设计? 考虑几个数据流和几个处理步骤的示例。我可以将数据流的模块化解析器编写为一组数据结构,并且可以将每个处理步骤实现为一个纯函数。一条数据所需的处理步骤将取决于其价值和其他价值。在某些步骤之后,应该有副作用,例如GUI更新或数据库查询。 以一种很好的方式绑定数据和解析步骤的“正确”方法是什么?可以编写一个大型函数,对各种数据类型执行正确的操作。或者,可以使用monad跟踪到目前为止已处理的内容,并让每个处理步骤从monad状态中获取下一步所需的内容。或者可以编写很大程度上独立的程序并发送消息(我不太喜欢此选项)。 他链接的幻灯片上有一个“我们需要的东西”项目符号:“将设计映射到类型/函数/类/单子的惯用法”。有哪些成语?:)

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.