Questions tagged «functional-programming»

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

17
没有可变状态怎么办?
最近,我已经阅读了很多有关函数式编程的文章,并且我能理解其中的大部分内容,但是我无能为力的一件事就是无状态编码。在我看来,通过删除可变状态来简化编程就像通过删除仪表板来“简化”汽车:最终产品可能更简单,但好运使其与最终用户互动。 我能想到的几乎每个用户应用程序都将状态作为核心概念。如果您写文档(或SO帖子),则状态随着每次新输入而改变。或者,如果您玩电子游戏,则有很多状态变量,从所有角色的位置开始,这些角色往往会不断移动。在不跟踪值更改的情况下,您怎么可能做些有用的事情? 每次我找到讨论此问题的内容时,都是用真正的技术功能性的语言编写的,这些功能假定我没有丰富的FP背景。有谁知道一种方法来向对命令性编码有很好而扎实的理解的人解释这一点,但是在功能方面谁是完整的n00b? 编辑:到目前为止,很多答复似乎都在试图说服我不变价值的优势。我明白了。这是很合理的。我不明白的是,如何在没有可变变量的情况下跟踪必须更改的值并不断更改。

8
如何使用underscore.js作为模板引擎?
我正在尝试学习javascript作为服务器端语言和功能性语言的新用法。几天前,我听说了node.js和express框架。然后我看到了underscore.js作为一组实用程序功能。我在stackoverflow上看到了这个问题 。它说我们可以使用underscore.js作为模板引擎。任何人都知道如何使用underscore.js进行模板制作的好教程,特别是对于那些对高级javascript经验较少的biginner而言。谢谢

4
在Scala中什么是“提升”?
有时,当我在Scala生态系统中阅读文章时,会读到“提升” /“提升”一词。不幸的是,没有解释确切的含义。我做了一些研究,似乎提升与功能值或类似的东西有关,但是我找不到能以初学者友好的方式解释提升实际上是什么的文字。 通过Lift框架(它的名称具有提升功能)还存在其他混乱,但这无助于回答这个问题。 什么是Scala中的“提升”?


11
没有空值的语言的最佳解释
当程序员抱怨空错误/异常时,经常有人问我们在没有空的情况下该怎么做。 我对选项类型的简洁性有一些基本了解,但是我没有足够的知识或语言技能来表达它。对以下内容的一个很好的解释是什么,使我们可以指向普通程序员,使之接近普通程序员? 默认情况下,不希望引用/指针为空 选项类型如何工作,包括简化检查空情况的策略,例如 模式匹配和 一元理解 替代解决方案,例如吃零信息 (我错过了其他方面)

15
Javascript减少对象数组
说我想对a.x中的每个元素求和arr。 arr = [{x:1},{x:2},{x:4}] arr.reduce(function(a,b){return a.x + b.x}) >> NaN 我有理由相信斧头在某些时候是不确定的。 以下工作正常 arr = [1,2,4] arr.reduce(function(a,b){return a + b}) >> 7 我在第一个示例中做错了什么?

17
在函数式编程中,什么是函子?
在阅读有关函数式编程的各种文章时,我遇到过几次“ Functor”一词,但是作者通常认为读者已经理解了该词。在网上四处浏览时,要么提供了过多的技术说明(请参阅Wikipedia文章),要么提供了令人难以置信的模糊说明(请参阅此ocaml-tutorial网站上有关Functors的部分)。 有人可以友好地定义该术语,解释其用法,还可以提供一个有关如何创建和使用Functor的示例吗? 编辑:尽管我对术语背后的理论感兴趣,但对理论的兴趣不如对概念的实现和实际使用感兴趣。 编辑2:似乎正在进行一些跨终端操作:我专门指的是函数编程的Functors,而不是C ++的函数对象。

16
相当于Python的zip函数的Javascript
是否有与Python的zip函数等效的JavaScript?也就是说,给定多个相同长度的数组,将创建一个成对的数组。 例如,如果我有三个看起来像这样的数组: var array1 = [1, 2, 3]; var array2 = ['a','b','c']; var array3 = [4, 5, 6]; 输出数组应为: var output array:[[1,'a',4], [2,'b',5], [3,'c',6]]

17
PHP的array_map包括键
有没有办法做这样的事情: $test_array = array("first_key" => "first_value", "second_key" => "second_value"); var_dump(array_map(function($a, $b) { return "$a loves $b"; }, array_keys($test_array), array_values($test_array))); 但是不要打电话 array_keys和array_values,直接传递$test_array变量? 所需的输出是: array(2) { [0]=> string(27) "first_key loves first_value" [1]=> string(29) "second_key loves second_value" }

6
字符串列表到一个字符串
假设您有一个: List<string> los = new List<string>(); 在这个疯狂的功能世界中,我们生活在这些日子中,其中之一最适合通过串联以下内容来创建一个字符串: String.Join(String.Empty, los.ToArray()); StringBuilder builder = new StringBuilder(); los.ForEach(s => builder.Append(s)); string disp = los.Aggregate<string>((a, b) => a + b); 或普通的旧StringBuilder foreach 或者,还有更好的方法?

11
为什么不变性在JavaScript中如此重要(或需要)?
我目前正在研究React JS和React Native框架。在阅读关于Facebook的Flux和Redux实现的文章时,我遇到了Immutability或Immutable-JS库。 问题是,为什么不变性如此重要?更改对象有什么问题?它不是使事情变得简单吗? 举个例子,让我们考虑一个简单的新闻阅读器应用程序,其打开屏幕是新闻标题的列表视图。 如果我设置说最初具有值的对象数组,我将无法对其进行操作。这就是不变性原则的意思,对不对?(如果我错了,请纠正我。)但是,如果我有一个新的News对象必须更新怎么办?在通常情况下,我可以将对象添加到数组中。在这种情况下我该如何实现?删除商店并重新创建?是不是将对象添加到数组中的开销较小?

13
是否有用于功能编程的软件工程方法?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 3年前关闭。 改善这个问题 今天所讲授的软件工程完全专注于面向对象的编程和“自然”的面向对象的世界观。有一种详细的方法学描述了如何将域模型转换为具有几个步骤和许多(UML)工件(如用例图或类图)的类模型。许多程序员已经内化了这种方法,并且对如何从头开始设计面向对象的应用程序有一个很好的主意。 新的炒作是函数式编程,许多书籍和教程都对此进行了讲授。但是功能软件工程呢?在阅读有关Lisp和Clojure的内容时,我得出了两个有趣的陈述: 功能程序通常是自下而上而不是自上而下的开发(“ On Lisp”,Paul Graham) 功能程序员使用Map,而OO程序员则使用对象/类(“ Rich Hickley的“ Java程序员的Clojure”)。 那么,对功能应用程序(即Lisp或Clojure)进行系统(基于模型?)设计的方法是什么?常见的步骤是什么,我使用什么工件,如何将它们从问题空间映射到解决方案空间?

11
为什么函数式编程还没有被接管?
已锁定。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 我读过一些有关声明式/函数式编程(语言)的文章,尝试过Haskell并自己编写了一篇。从我所看到的,函数式编程比经典的命令式样式有几个优点: 无状态程序;没有副作用 并发 在新兴的多核技术中发挥出色 程序通常较短,在某些情况下更易于阅读 生产率提高(例如:Erlang) 命令式编程是一个非常古老的范例(据我所知),可能不适合21世纪 为什么使用功能语言编写的公司或程序仍然如此“稀有”? 为什么在查看函数式编程的优势时,我们仍然使用命令式编程语言? 也许在1990年还为时过早,但是今天呢?


6
Python:为什么functools.partial是必需的?
部分应用程序很酷。哪些功能functools.partial提供了lambda无法获得的功能? >>> sum = lambda x, y : x + y >>> sum(1, 2) 3 >>> incr = lambda y : sum(1, y) >>> incr(2) 3 >>> def sum2(x, y): return x + y >>> incr2 = functools.partial(sum2, 1) >>> incr2(4) 5 是functools某种方式更有效或更可读吗?

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.