Questions tagged «functional-programming»

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

4
如何按两个字段对Scala中的列表进行排序?
如何在Scala中按两个字段对列表进行排序,在此示例中,我将按lastName和firstName进行排序? case class Row(var firstName: String, var lastName: String, var city: String) var rows = List(new Row("Oscar", "Wilde", "London"), new Row("Otto", "Swift", "Berlin"), new Row("Carl", "Swift", "Paris"), new Row("Hans", "Swift", "Dublin"), new Row("Hugo", "Swift", "Sligo")) rows.sortBy(_.lastName) 我尝试这样的事情 rows.sortBy(_.lastName + _.firstName) 但这不起作用。因此,我对一个好的简单解决方案感到好奇。



7
MATLAB中的地图功能?
我对MATLAB没有Map函数感到有些惊讶,所以我自己一起破解了一个函数,因为这是我不能没有的。有更好的版本吗?是否缺少我所缺少的针对MATLAB的标准功能编程库? function results = map(f,list) % why doesn't MATLAB have a Map function? results = zeros(1,length(list)); for k = 1:length(list) results(1,k) = f(list(k)); end end 用法例如 map( @(x)x^2,1:10)


5
什么是“无点”样式(在函数式编程中)?
我最近注意到的一句话是“无点”风格的概念。 首先,有一个问题,还有这个问题。 然后,我发现他们在这里提到“可能值得讨论的另一个主题是作者对点自由样式的厌恶”。 什么是“免积分”风格?有人可以给出一个简洁的解释吗?它与“自动”咖喱有关系吗? 为了了解我的水平-我一直在教自己Scheme,并且编写了一个简单的Scheme解释器...我了解“隐式”的currying是什么,但是我不知道任何Haskell或ML。


4
您如何知道何时使用左折和何时使用右折?
我知道向左折叠会产生向左倾斜的树木,向右折叠会产生向右倾斜的树木,但是当我伸手折叠时,有时会发现自己陷入了头痛的想法,试图确定哪种折叠方式是适当的。我通常最终会解决整个问题,并逐步解决适用于我的问题的fold函数的实现。 所以我想知道的是: 确定是左折还是右折的经验法则是什么? 考虑到我面临的问题,如何快速决定使用哪种折叠类型? Scala by Example(PDF)中有一个示例,该示例使用折叠来编写一个称为flatten的函数,该函数将元素列表的列表连接为一个列表。在这种情况下,正确的选择是正确的选择(考虑到列表的合并方式),但是我必须仔细考虑一下才能得出结论。 由于折叠是(功能)编程中的常见操作,因此我希望能够快速而自信地做出此类决定。那么...有什么提示吗?

9
函数式编程-不变性昂贵吗?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 问题分为两部分。首先是概念上的。接下来的内容将在Scala中更具体地研究相同的问题。 在编程语言中仅使用不可变数据结构是否会使在实践中实现某些算法/逻辑本质上在计算上更加昂贵?这引出了一个事实,即不变性是纯功能语言的核心宗旨。还有其他因素对此有影响吗? 让我们举一个更具体的例子。通常对内存数据结构使用可变操作来教授和实现Quicksort。如何以一种PURE功能方式实现这种事情,并且具有与可变版本相当的计算和存储开销。特别是在Scala中。我在下面列出了一些粗略的基准。 更多细节: 我来自命令式编程背景(C ++,Java)。我一直在探索函数式编程,特别是Scala。 纯函数式编程的一些主要原理: 职能是头等公民。 函数没有副作用,因此对象/数据结构是不可变的。 即使现代JVM在创建对象方面非常高效,并且垃圾回收对于短寿命的对象而言非常便宜,但将对象创建最小化可能还是更好的选择吧?至少在并发和锁定不是问题的单线程应用程序中。由于Scala是一种混合范例,因此可以根据需要选择使用可变对象编写命令性代码。但是,作为一个花了很多年尝试重用对象并最小化分配的人。我希望对不允许的思想流派有所了解。 作为一个具体案例,我对本教程 6中的代码片段感到有些惊讶。它有一个Java版本的Quicksort,然后是一个简洁的Scala实现。 这是我对实现进行基准测试的尝试。我尚未进行详细的分析。但是,我的猜测是,Scala版本的速度较慢,因为分配的对象数是线性的(每个递归调用一个)。尾叫优化有没有机会发挥作用?如果我是对的,Scala支持针对自递归调用的尾部调用优化。因此,它应该只是在帮助它。我正在使用Scala 2.8。 Java版本 public class QuickSortJ { public static void sort(int[] xs) { sort(xs, 0, xs.length -1 ); } static void sort(int[] xs, int l, int r) { if (r >= l) return; int pivot = …


10
Curry-Howard同构引起的最有趣的等价是什么?
在我编程生涯的后期,我遇到了Curry-Howard同构,也许这让我完全被它迷住了。这意味着对于每个编程概念,形式逻辑中都有一个精确的类似物,反之亦然。这是此类比喻的“基本”清单,让我无所适从: program/definition | proof type/declaration | proposition inhabited type | theorem/lemma function | implication function argument | hypothesis/antecedent function result | conclusion/consequent function application | modus ponens recursion | induction identity function | tautology non-terminating function | absurdity/contradiction tuple | conjunction (and) disjoint union | disjunction (or) -- corrected by …


14
中型Clojure样品应用程序?
是否有一个中等大小的Clojure示例应用程序可以用作“最佳实践”示例,并且是一种查看这种应用程序在代码和代码组织方面是什么样的好方法?Web应用程序对我来说尤其有趣,但最重要的是该程序执行了一些通常有用的操作(例如,博客,错误跟踪,CMS),而不是我从未真正实现过的数学操作世界(解决N皇后问题,模拟生命,生成斐波那契数列以及此类函数式编程语言的常见用法)。 谢谢!

1
什么是同态?
通过阅读这个经典论文,我卡上paramorphisms。不幸的是,该部分很薄,并且Wikipedia页面什么也没说。 我的Haskell翻译是: para :: (a -> [a] -> b -> b) -> b -> [a] -> b para f base = h where h [] = base h (x:xs) = f x xs (h xs) 但是我不认为-我对类型签名或所需结果没有任何直觉。 什么是同质性,有什么有用的例子在起作用? 是的,我已经看过这些 问题,但是它们并没有直接涵盖同质性,仅指向了可能对参考有用的资源,但对学习材料却没有帮助。

1
为什么民间传说和ramda如此不同?
我正在通过阅读DrBoolean的书来学习javascript FP 。 我到处搜索功能编程库。我找到了Ramda和Folktale。两者都声称是功能编程库。 但是它们是如此不同: Ramda似乎包含用于处理list的实用程序函数:map,reduce,filter和pure函数:curry,compose。它不包含任何要处理monad,函子的东西。 但是Folktale不包含任何用于列表或函数的实用程序。似乎在JavaScript中实现了像monad这样的代数结构:Maybe,Task ... 实际上,我发现了更多的库,它们似乎都属于两类。下划线和lodash就像Ramda。幻想世界,无意义的幻想就像民间故事。 难道这很不相同的库都被称为功能,如果有,是什么让每一个功能库?

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.