Questions tagged «functional-programming»

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

5
在Swift中使用索引映射或缩小
有没有办法在Swift map或reduceSwift中获取数组的索引?我正在寻找类似each_with_indexRuby的东西。 func lunhCheck(number : String) -> Bool { var odd = true; return reverse(number).map { String($0).toInt()! }.reduce(0) { odd = !odd return $0 + (odd ? ($1 == 9 ? 9 : ($1 * 2) % 9) : $1) } % 10 == 0 } lunhCheck("49927398716") lunhCheck("49927398717") 我想摆脱上面的odd变量。



2
为什么λ微积分的最佳评估器无需公式就可以计算较大的模幂?
教堂数字是自然数作为函数的编码。 (\ f x → (f x)) -- church number 1 (\ f x → (f (f (f x)))) -- church number 3 (\ f x → (f (f (f (f x))))) -- church number 4 整整齐齐地,您只需应用两个教堂数字即可对其求幂。也就是说,如果您将4应用于2,则会得到教堂编号16或2^4。显然,这完全不可行。教堂号码需要线性的存储空间,而且速度非常慢。计算类似的10^10内容-GHCI可以快速正确回答-可能会花费一些时间,而且无论如何都无法容纳计算机的内存。 最近,我一直在尝试使用最佳λ评估器。在测试中,我不小心在最佳λ计算器上键入了以下内容: 10 ^ 10 % 13 它应该是乘法,而不是幂。在我不由自主地终止永远运行的程序之前,它满足了我的要求: 3 { iterations: 11523, applications: 5748, …

5
Haskell和F#之间的主要区别是什么?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 6年前关闭。 已锁定。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 我已经在Internet上搜索了F#和Haskell之间的比较,但是还没有找到真正确定的东西。主要区别是什么?为什么我要选择一个?

8
无状态编程的优势?
我最近一直在学习函数式编程(特别是Haskell,但是我也阅读了有关Lisp和Erlang的教程)。虽然我发现这些概念很有启发性,但我仍然看不到“无副作用”概念的实际方面。它的实际优势是什么?我试图从功能的思维方式进行思考,但是有些情况似乎过于复杂,而无法以简单的方式保存状态(我不认为Haskell的monad是“简单的”)。 值得继续深入学习Haskell(或另一种纯功能语言)吗?函数式或无状态编程实际上比过程式生产率更高吗?以后我可能会继续使用Haskell或其他功能语言,还是应该仅出于理解目的学习它? 我更关心性能而不是生产力。所以我主要是在问我是否会比在过程/面向对象/什么方面的语言在功能语言上更有效率。


7
如何使用ImmutableJS更新List中的元素?
这是官方文件所说的 updateIn(keyPath: Array<any>, updater: (value: any) => any): List<T> updateIn(keyPath: Array<any>, notSetValue: any, updater: (value: any) => any): List<T> updateIn(keyPath: Iterable<any, any>, updater: (value: any) => any): List<T> updateIn(keyPath: Iterable<any, any>, notSetValue: any, updater: (value: any) => any): List<T> 普通的Web开发人员(不是函数式程序员)是无法理解的! 我有一个非常简单的(对于非功能性方法)案例。 var arr = []; arr.push({id: 1, name: "first", count: …

9
使用python map和其他功能工具
这相当不错,但是我正在尝试学习/理解python中的函数式编程。如下代码: foos = [1.0,2.0,3.0,4.0,5.0] bars = [1,2,3] def maptest(foo, bar): print foo, bar map(maptest, foos, bars) 产生: 1.0 1 2.0 2 3.0 3 4.0 None 5.0 None 问:有没有一种方法可以使用map或python中的任何其他功能工具来产生以下内容而没有循环等。 1.0 [1,2,3] 2.0 [1,2,3] 3.0 [1,2,3] 4.0 [1,2,3] 5.0 [1,2,3] 顺便提一下,如果foo和bar之间存在依赖关系,则实现将如何更改。例如 foos = [1.0,2.0,3.0,4.0,5.0] bars = [1,2,3,4,5] 并打印: 1.0 [2,3,4,5] 2.0 [1,3,4,5] …


5
为什么Go中没有泛型?
免责声明:我现在只和Go玩了一天,所以我很有可能错过了很多。 有谁知道为什么Go中没有对泛型/模板/ whatsInAName的真正支持?因此,有一个通用的map,但这是由编译器提供的,而Go程序员不能编写自己的实现。关于如何使Go尽可能正交的所有讨论,为什么我可以使用通用类型而不创建新类型? 尤其是在函数式编程方面,有lambda甚至闭包,但是在缺少泛型的静态类型系统中,我该如何编写泛型高阶函数,如filter(predicate, list)?好的,可以通过interface{}牺牲类型安全性来完成链接列表等。 由于在SO / Google上进行的快速搜索没有发现任何见解,因此,仿制药(如果有的话)似乎会在事后添加到Go中。我相信Thompson会比Java员工做得更好,但是为什么要排除泛型呢?还是他们已经计划并且尚未实施?

29
为什么要学习Lisp?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 我真的觉得我应该学习Lisp,并且那里有很多好的资源可以帮助我做到这一点。 我不会为复杂的语法所困扰,但是我会在“传统商业程序设计”中找到合适的地方使用它而不是过程语言。 有没有用Lisp编写的商业杀手级应用程序?

8
您如何在Haskell中表示图?
使用代数数据类型很容易在haskell中表示树或列表。但是,您将如何以印刷方式表示图形?看来您需要指针。我猜你可能会喜欢 type Nodetag = String type Neighbours = [Nodetag] data Node a = Node a Nodetag Neighbours 那将是可行的。但是,感觉有点分离。结构中不同节点之间的链接并不像列表中当前的上一个元素和下一个元素之间的链接或树中节点的父级和子级之间的链接那样“牢固”。我有一种预感,即在我定义的图形上进行代数运算会受到标记系统引入的间接级别的影响。 正是这种怀疑和对自卑的感觉使我提出了这个问题。在Haskell中是否存在一种更好/更数学上优雅的图形定义方法?还是我偶然发现了一些本来就困难/基本的东西?递归数据结构很不错,但这似乎是另外一回事。与树和列表如何自引用不同意义上的自引用数据结构。就像列表和树在类型级别是自引用的,而图在值级别是自引用的。 那么到底是怎么回事?

3
什么是Hindley-Milner?
我遇到过这个术语Hindley-Milner,我不确定是否理解它的含义。 我已阅读以下帖子: Steve Yegge- 动态语言反击 史蒂夫·叶格- 皮诺奇问题 Daniel Spiewak- 什么是Hindley-Milner?(为什么它很酷?) 但是维基百科中没有一个词条可以为我提供简要的解释。 注意 - 现在已添加一个 它是什么? 哪些语言和工具实现或使用它? 您能提供一个简洁的答案吗?

24
使用reduce()的有用代码?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 改善这个问题 这里有没有人有任何有用的代码在python中使用reduce()函数?除了示例中常见的+和*之外,是否还有其他代码? 通过GvR 引用Python 3000中的reduce()的命运

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.