Questions tagged «functional-programming»

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

9
Java SE 8是否具有对或元组?
我正在玩Java SE 8中的惰性函数操作,我想要一个对对/元组map的索引,然后基于第二个元素,最后只输出索引。i(i, value[i])filtervalue[i] 我还必须忍受这一点吗:Java中的C ++ Pair <L,R>等效项是什么?在lambdas和stream的大胆新时代中? 更新:我提供了一个相当简化的示例,该示例在以下答案之一中提供了@dkatzel提供的简洁解决方案。但是,它不能一概而论。因此,让我添加一个更一般的示例: package com.example.test; import java.util.ArrayList; import java.util.stream.IntStream; public class Main { public static void main(String[] args) { boolean [][] directed_acyclic_graph = new boolean[][]{ {false, true, false, true, false, true}, {false, false, false, true, false, true}, {false, false, false, true, false, true}, {false, …

7
functools部分如何做?
我无法了解部分功能在functools中的工作方式。我从这里有以下代码: >>> 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 现在排队 incr = lambda y : sum(1, y) …


6
按Java 8流API分组
我尝试在Java 8流API中找到一种简单的方法来进行分组,我提出了这种复杂的方法! List<String> list = new ArrayList<>(); list.add("Hello"); list.add("Hello"); list.add("World"); Map<String, List<String>> collect = list.stream().collect( Collectors.groupingBy(o -> o)); System.out.println(collect); List<String[]> collect2 = collect .entrySet() .stream() .map(e -> new String[] { e.getKey(), String.valueOf(e.getValue().size()) }) .collect(Collectors.toList()); collect2.forEach(o -> System.out.println(o[0] + " >> " + o[1])); 感谢您的投入。



9
函数式和命令式编程语言之间有什么区别?
大多数主流语言,包括诸如C#,Visual Basic,C ++和Java之类的面向对象编程(OOP)语言,都被设计为主要支持命令式(过程式)编程,而类似Haskell / gofer的语言纯粹是功能性的。谁能详细说明这两种编程方式之间的区别? 我知道选择编程方式取决于用户要求,但是为什么建议学习功能性编程语言呢?

23
如何避免在Node.js中长时间嵌套异步函数
我想制作一个页面来显示数据库中的某些数据,因此我创建了一些函数来从数据库中获取数据。我只是Node.js中的新手,据我了解,如果我想在一个页面中使用它们(HTTP响应),则必须将它们全部嵌套: http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/html'}); var html = "<h1>Demo page</h1>"; getSomeDate(client, function(someData) { html += "<p>"+ someData +"</p>"; getSomeOtherDate(client, function(someOtherData) { html += "<p>"+ someOtherData +"</p>"; getMoreData(client, function(moreData) { html += "<p>"+ moreData +"</p>"; res.write(html); res.end(); }); }); }); 如果有很多类似的功能,那么嵌套就会成为问题。 有办法避免这种情况吗?我想这与如何组合多个异步函数有关,这似乎是基本的东西。

2
zygohistomorphic prepromorphisms在现实世界中的应用
是的,这些: {-#LANGUAGE TypeOperators, RankNTypes #-} import Control.Morphism.Zygo import Control.Morphism.Prepro import Control.Morphism.Histo import Control.Functor.Algebra import Control.Functor.Extras import Control.Functor.Fix import Control.Comonad.Cofree zygohistomorphic_prepromorphism :: Functor f => Algebra f b -> GAlgebra f (ZygoT (Cofree f) b) a -> (f :~> f) -> FixF f -> a zygohistomorphic_prepromorphism f = g_prepro (distZygoT (liftAlgebra …

7
folder vs.foldl(或foldl')的含义
首先,我正在阅读的Real World Haskell说永远不要使用foldl,而是使用foldl'。所以我相信。 但我在朦胧时使用foldr对foldl'。尽管我可以看到它们摆在我面前的方式各不相同,但我还是很愚蠢,无法理解何时“哪个更好”。我想在我看来,使用哪个并不重要,因为它们都产生相同的答案(不是吗?)。实际上,我以前使用此构造的经验来自Ruby inject和Clojure的reduce,它们似乎没有“ left”和“ right”版本。(旁问:他们使用哪个版本?) 任何能帮助像我这样的聪明人挑战的见解将不胜感激!

13
有哪些工具可以用C进行功能编程?
最近我一直在思考如何使用C(而不是 C ++)进行函数式编程。显然,C是一种过程语言,并不真正支持本机功能编程。 是否有任何编译器/语言扩展在语言中添加了一些功能性的编程构造?GCC提供嵌套功能作为语言扩展;嵌套函数可以从父堆栈框架访问变量,但这距离成熟的闭包还有很长的路要走。 例如,我认为在C语言中可能真正有用的一件事是,在需要使用函数指针的任何地方,您都可以传递lambda表达式,从而创建一个衰减为函数指针的闭包。C ++ 0x将包含lambda表达式(我认为它很棒);但是,我正在寻找适用于直C的工具。 为了明确起见,我并不是要解决C语言中更适合函数编程的特定问题。我只是想知道如果要使用哪些工具。

14
使用带有Lambda的JDK8压缩流(java.util.stream.Streams.zip)
在带有lambda b93的JDK 8中,b93中有一个类java.util.stream.Streams.zip可用于对流进行zip处理(这在Dhananjay Nene的Exploring Java8 Lambdas。Part 1教程中进行了说明)。该功能: 创建一个懒惰且顺序的组合Stream,其元素是将两个流的元素组合在一起的结果。 然而,在b98中,这种现象消失了。实际上,在b98的java.util.stream中Streams甚至无法访问该类。 此功能是否已被移走,如果是的话,如何使用b98简洁地压缩流? 我想到的应用程序是此Shen的java实现中的,我在其中替换了zip功能。 static <T> boolean every(Collection<T> c1, Collection<T> c2, BiPredicate<T, T> pred) static <T> T find(Collection<T> c1, Collection<T> c2, BiPredicate<T, T> pred) 具有相当冗长的代码的功能(不使用b98的功能)。

2
如何在lodash中使用include方法检查对象是否在集合中?
lodash让我使用以下命令检查基本数据类型的成员资格includes: _.includes([1, 2, 3], 2) > true 但是以下操作无效: _.includes([{"a": 1}, {"b": 2}], {"b": 2}) > false 这使我感到困惑,因为以下搜索集合的方法似乎还不错: _.where([{"a": 1}, {"b": 2}], {"b": 2}) > {"b": 2} _.find([{"a": 1}, {"b": 2}], {"b": 2}) > {"b": 2} 我究竟做错了什么?如何使用来检查集合中对象的成员资格includes? 编辑:问题最初是针对lodash版本2.4.1,针对lodash 4.0.0更新的

4
Swift编译器错误:字符串连接中的“表达式过于复杂”
我发现这比任何事情都有趣。我已经解决了,但是我想知道原因。错误如下:DataManager.swift:51:90: Expression was too complex to be solved in reasonable time; consider breaking up the expression into distinct sub-expressions。为什么抱怨呢?似乎是最简单的表达方式之一。 编译器指向该columns + ");";部分 func tableName() -> String { return("users"); } func createTableStatement(schema: [String]) -> String { var schema = schema; schema.append("id string"); schema.append("created integer"); schema.append("updated integer"); schema.append("model blob"); var columns: String …

7
lapply和do.call有什么区别?
我最近学习R和由两个功能感到困惑:lapply和do.call。似乎它们与mapLisp中的功能相似。但是,为什么有两个函数的名称如此不同?为什么R不只使用一个称为的函数map?

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.