Questions tagged «functional-programming»

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

1
Clojure与Scala中的模式匹配
这两种语言的模式匹配之间的主要区别是什么?我不是在指语法,而是功能,实现细节,用例范围和必要性。 Scala应用程序(例如Lift和Play)自豪地谈到了语言模式匹配能力。另一方面,Clojure具有一个库core.match,并内置了解构功能,该功能似乎也很强大。 *注:之所以被问到这个问题,是因为我看到了一篇博客文章,其中的一个程序员作为实验,使用Scala和Clojure构建了一个Lisp解释器。他说,克洛瑞尔(Clojure)比赛在经过一定长度后就中断了,但无法解释原因,但我真的很想知道。您可以在以下位置找到此帖子:http : //www.janvsmachine.net/2013/09/writing-simple-lisp-interpreter-in-clojure.html

2
功能编程和状态算法
我正在用Haskell学习函数式编程。同时,我正在研究自动机理论,由于两者看起来很融洽,所以我正在编写一个小型库来玩自动机。 这就是让我问的问题。在研究评估状态可达性的方法时,我想到了一个简单的递归算法效率不高,因为某些路径可能共享某些状态,而我可能最终不只一次评估它们。 例如,在这里,评估可达性的摹从一个,我必须排除˚F双方同时检查通过路径d和Ç: 因此,我的想法是,在多个路径上并行工作并更新排除状态的共享记录的算法可能很棒,但这对我来说太过分了。 我已经看到,在某些简单的递归情况下,可以将状态作为参数传递,这就是我在这里要做的,因为我向前传递了要避免循环的状态列表。但是是否有一种方法也可以向后传递该列表,例如将其与canReach函数的布尔结果一起返回到元组中?(尽管这有点强迫) 除了示例案例的有效性之外,还有哪些其他技术可用来解决此类问题?我觉得这些必须足够普遍,以至于必须有解决方案,例如fold*or 会发生什么map。 到目前为止,阅读learningyouahaskell.com并没有发现任何内容,但考虑到我还没有接触过monad。 (如果有兴趣,我将代码发布在codereview上)

1
功能反应/关系编程–有区别吗?
我一直在使用Reactive Cocoa(由GitHub提供),这是一种用于Cocoa库的功能性反应式编程API,现在已经使用了一段时间,但是我刚刚阅读了“ Out of the Tar Pit”,据称该论文介绍了其背后的概念,我有些困惑。 本文介绍了(据我所知)功能关系编程,其中数据之间的关系是由FRP系统应强制执行的条件创建的,以减少所需的“偶然”逻辑和状态。 我的问题是,这两个概念-FR(eactive)P和FR(elational)P本质上是同一件事(前者只是后者的实现),还是两者之间存在核心区别?不幸的是,目前我对该领域的了解还不足以让我足够区分它们。 如果存在差异,顾名思义,这似乎与数据更改有关系。当然,反应性可可粉(和C#中的Rx)具有创建信号的概念,该信号在数据变化时触发,并且可用于随时间连续修改值。 这有区别吗?如果没有,那是什么? (请原谅不良标签,我找不到相关标签,也无法创建它们-如果可以的话,请将标签更新为更合适的标签。)

2
函数式反应式编程-Fay的表达能力够吗?
因此,我正在做一个相当参与的javascript / html客户端,其中包含许多ajax调用和其他涉及回调机制的事情。我很高兴为此目的使用Fay。我知道榆树。尝试了一下,喜欢FRP元素。现在,我想知道在Fay中是否可能有类似的结构。 此时,Fay中是否有FRP的具体示例? 一些相关技术: 箭,JavaScript中的箭状玻璃钢 FlapJax,另一个javascript替代方案 Bacon.js,javascript中的FRP 一种可能的解决方案,使用培根。带演示。

10
如何在不使用可变变量的情况下编写有用的Java程序
我正在阅读一篇有关函数式编程的文章,作者在其中指出 (take 25 (squares-of (integers))) 请注意,它没有变量。实际上,它只具有三个功能和一个常数。尝试在Java中写整数平方而不使用变量。哦,也许有一种方法可以做到,但是它当然是不自然的,而且读起来也不如我上面的程序那么好。 用Java可以实现吗?假设您需要打印前15个整数的平方,是否可以在不使用变量的情况下编写for或while循环? Mod通知 这个问题不是代码高尔夫球比赛。我们正在寻找可以解释所涉及概念的答案(理想情况下,无需重复先前的答案),而不仅是针对另一段代码。

1
在Java 8中删除功能类型的原因
我一直试图理解为什么JDK 8 Lambda专家组(EG)决定不在Java编程语言中包括新的函数类型。 在邮件列表中,我找到了一个讨论删除函数类型的话题。 许多语句对我来说是模棱两可的,这可能是由于缺乏上下文,在某些情况下,是因为我对类型系统的实现了解有限。 但是,我相信我可以安全地在此站点中提出几个问题,以帮助我更好地理解它们的含义。 我知道我可以在邮件列表中提出问题,但是该线程很旧,并且所有决策都已制定,因此我很可能会被忽略,尤其是看到这些人已经推迟了他们的计划。 在支持删除功能类型并支持使用SAM类型的回答中,Brian Goetz说: 没有修复。关于修正函数类型的实用性有很长的篇幅。如果不进行具体化,函数类型将受到阻碍。 我找不到他提到的话题。现在,我可以理解,结构函数类型的引入可能暗示着Java(通常是名义上的类型)系统中的某些复杂性,我无法理解的是参数化SAM类型在具体化方面有何不同。 难道他们都没有受到相同的修复问题吗?有谁知道功能类型在参数化方面与参数化SAM类型有何不同? 格茨在另一条评论中说: 有两种基本的键入方法:标称方法和结构方法。名词的标识基于其名称;结构类型的标识基于其组成(例如“ int,int的元组”或“ int到float的函数”。)大多数语言大多选择名词性或结构性;除了“边缘”外,没有多少语言能够成功地混合名义和结构类型。Java几乎完全是名义上的(有一些例外:数组是结构型的,但是在底部总是有名义上的元素类型;泛型也有名义上的和结构上的混合,实际上这是许多源代码的一部分)人们对泛型的抱怨。)将结构类型系统(函数类型)嫁接到Java上 标称类型的系统意味着新的复杂性和边缘情况。函数类型的好处值得吗? 那些拥有实施类型系统经验的人。您知道他在这里提到的这些复杂性或极端情况的任何例子吗? 老实说,当我认为像Scala这样完全基于JVM的编程语言支持结构类型(如函数和元组)时,即使存在底层平台的验证问题,我也对这些指控感到困惑。 不要误会我的意思,我并不是说功能类型应该比SAM类型更好。我只想了解他们为什么做出这个决定。

2
FP用于仿真和建模
我将要开始一个模拟/建模项目。我已经知道OOP用于此类项目。但是,研究Haskell使我考虑使用FP范例对组件系统进行建模。让我详细说明: 假设我有一个类型A的组件,其特征是一组数据(如温度或压力,PDE和某些边界条件等参数),以及一个类型B的组件,其特征是一组不同的数据(不同或相同的参数,不同的PDE和边界条件)。我们还假设将要应用于每个组件的函数/方法是相同的(例如,Galerkin方法)。对象的可变状态将用于非恒定参数。 如果要使用OOP方法,我将创建两个对象,这些对象将封装每种类型的数据,解决PDE的方法(继承将在此处用于代码重用)和PDE的解决方案。 另一方面,如果我要使用FP方法,则每个组件都将分解为数据部分和对数据起作用的功能,以获得PDE的解决方案。非常数参数将作为其他函数(例如时间)传递或由某种可变性(可变性的仿真等)表示。假设对数据进行线性运算是微不足道的,这种方法对我来说似乎更简单。 总之,与OOP相比,实施FP方法实际上是否更简单,更易于管理(添加不同类型的组件或新方法来解决pde)? 我来自C ++ / Fortran,而且我不是专业程序员,所以请在出现任何错误的地方进行纠正。

5
实现Conway的《人生游戏》的功能编程方式是什么?
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 4年前关闭。 我最近实施的乐趣Conway的生命游戏在Javascript(实际上CoffeeScript的,但同样的事情)。由于javascript可以用作功能性语言,因此我一直试图保持这种状态。我对结果不满意。我是一个相当不错的面向对象程序员,而我的解决方案充满了同样的古老。这么长的问题很简短:这样做的(伪代码)功能样式是什么? 这是我的尝试的伪代码: class Node update: (board) -> get number_of_alive_neighbors from board get this_is_alive from board if this_is_alive and number_of_alive_neighbors < 2 then die if this_is_alive and number_of_alive_neighbors > 3 then die if not this_is_alive and number_of_alive_neighbors == 3 then alive class NodeLocations at: (x, y) -> return …

3
如何进入高级函数式编程
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,以使它成为软件工程堆栈交换的主题。 4年前关闭。 首先我很抱歉,如果这不是该问题的正确答案,但是我认为,CS。不适用于StackOverflow,这也不是正确的答案。 我真的很喜欢函数式编程,我认为我是F#的中级人员,并且对Haskell的基本概念非常了解-是的,我想我知道/也很清楚Monad是什么。 现在,我真的很想将其带到一个新的高度,并想了解所有关于函子和东西的话题。我只是不知道从哪里开始。 阅读有关Lambda微积分的信息吗?范畴论?我俩都知道一点,但我不认为这是正确/最快的启蒙方式。 也许您可以给我一些提示。 PS:我不怕数学,也不会轻易对练习感到沮丧,但是我更喜欢一些介绍/文本,您可以在其中放置一些代码,因为这样您可以立即获得反馈。

5
函数式编程只是有所不同,还是真的更难?
函数式编程只是有所不同,还是真的更难? 假设某人以前从未学习过编程,而是接受过函数编程的培训。VS从未接触过编程的人,并且接受过命令式编程的教育。他会发现哪个更强硬?还是一样? 我的问题:说现在的问题是骆驼式输入 这样qwe_asd_zxc_rty_fgh_vbn变成qweAsdZxcRtyFghVbn 程序方式是: 沿 _ 遍历数组,跳过第一项 对于每个条目,我们将首字母大写 将结果结合在一起 功能方式是: 如果找不到_回报input 切掉input第一个_(这样我们就可以得到qwe和asd_zxc_rty_gfh_cvb) 大写的第一个字母head并与f(tail) 好吧,如果您有功能背景并且在过程编程方面有丰富的经验,我想问:确定过程方式是否需要花费更长的时间,或者确定函数方式需要更长的时间? 如果您有程序背景,但是有多年的函数式编程经验,我想问一个相同的问题:确定程序的方式会花费您更长的时间,还是找到功能的过程会花费更长的时间办法?

4
函数式编程—不变性
我试图理解在FP中处理不可变数据的情况(特别是在F#中,但是其他FP也可以),并打破了全态思维(OOP风格)的旧习惯。所选答案的问题的一部分在这里重申,我周边的任何问题写起坐由状态表示在OOP中FP解决与不变的人搜索(对于例如:与生产者和消费者队列)。有任何想法或链接吗?提前致谢。 编辑:为了进一步澄清这个问题,不可变结构(例如:队列)将如何在FP中的多个线程(例如,生产者和消费者)之间并发共享

4
商业软件中的功能编程
我最近正在和一位同事讨论函数式编程。尽管我们两个人都认为FP具有一些明显的好处(简单的代码,更容易进行数学推理等),但我们都想知道FP软件是否会或将来会在商业软件中使用它。 我知道有许多功能性的开放源代码和学术项目(例如,我在Stack Overflow上已经看到了这个问题),但我想知道是否有人可以列出至少一些编写的其他商业软件,以功能语言(以及哪种语言)。

2
我们可以建造一台功能正常的计算机吗?
就像FP一样,最终,我们所有的程序都是结构化的。也就是说,我们制作它们的纯度或功能无关紧要-它们始终会转换为汇编,因此实际上在幕后运行的是指令,状态和循环。我们有点模仿FP。 作为硬件新手,我的问题是:为什么我们不使用实际上以功能样式计算事物的计算机体系结构?例如,一台计算机可能由原始的“功能芯片”组成,例如“ concat”,“ map”和“ reduce”,而程序只会告诉计算机如何在这些芯片之间流动数据以计算所需的结果,例如连接语言。 这真的没有道理,但可以说明我在想什么。

4
非OOP范例是否支持封装等概念?
面向对象编程中的重要概念之一是封装。但是,最近,软件世界似乎倾向于使用其他范例,例如函数式编程。 这让我思考,封装和其他OOP原则如何?他们错了吗? OOP应用错误吗?例如,艾伦·凯(Alan Kay)在OOPSLA'97主题演讲中说:“我发明了术语面向对象,我可以告诉你我没有C ++。” 乔·阿姆斯特朗(Joe Armstrong)-“对象将功能和数据结构以不可分割的单位绑定在一起。我认为这是一个根本性的错误,因为功能和数据结构属于完全不同的世界。”


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.