标签: functional-programming

如何将Seq [A [B,B]]减少到[A,Seq [B]]

鉴于eithers的序列Seq[Either[String,A]]Left作为一个错误消息.我想获得一个Either[String,Seq[A]]在那里我得到了Right(这将是一个Seq[A]),如果序列的所有元素Right.如果至少有一个Left(错误消息),我想获取第一条错误消息或所有错误消息的串联.

当然你可以发布scalaz代码,但我也对不使用它的代码感兴趣.

编辑

我改变了标题,最初要求Either[Seq[A],Seq[B]]反映信息的正文.

functional-programming scala scalaz

48
推荐指数
5
解决办法
8293
查看次数

"理性"一词在计算机科学中意味着什么?

在学习函数式编程的过程中,我不断遇到"理由"一词,特别是在纯函数和/或引用透明性的背景下.有人可以解释一下究竟是什么意思吗?

haskell functional-programming scala

48
推荐指数
5
解决办法
8206
查看次数

在OCaml设计大型项目

在OCaml中编写大型软件项目的最佳实践是什么?

你如何构建你的项目?

应该和不应该使用OCaml的哪些功能来简化代码管理?例外?一流的模块?GADTs?对象类型?

建立系统?测试框架?宬?

我找到了针对haskell的很好的建议,我认为为OCaml提供类似的东西会很好.

ocaml functional-programming

48
推荐指数
3
解决办法
4451
查看次数

如何让F#与Mono合作?

我似乎找不到单声道的编译器/插件.有人存在吗?

ubuntu mono f# functional-programming ubuntu-9.04

47
推荐指数
4
解决办法
2万
查看次数

Clojure:如何在运行时找出函数的arity?

给定一个函数对象或名称,我该如何确定它的arity?有点像(arity func-name).

我希望有一种方法,因为arity在Clojure中非常重要

functional-programming clojure

47
推荐指数
4
解决办法
6455
查看次数

是否存在无法使用尾递归编写的问题?

尾递归是函数式语言中一个重要的性能优化策略,因为它允许递归调用消耗常量堆栈(而不是O(n)).

是否有任何问题根本无法以尾递归方式编写,或者总是可以将天真递归函数转换为尾递归函数?

如果是这样,有一天功能编译器和解释器可能足够智能以自动执行转换?

recursion functional-programming tail-recursion

47
推荐指数
4
解决办法
6799
查看次数

在Scala中使用部分函数 - 它是如何工作的?

我是Scala的新手,我正在使用2.9.1,而我正试图了解如何使用部分功能.我对curried函数有一个基本的了解,我知道部分函数有点像curried函数,它们只有2nary或者其他类似函数.你可以告诉我,我有点绿.

看起来在某些情况下,比如XML过滤,能够部分功能是非常有利的,所以我希望能更好地理解如何使用它们.

我有一个使用RewriteRule结构的函数,但我需要它使用两个参数,而RewriteRule结构只需要一个,或一个部分函数.我认为这是我认为它有用的案例之一.

任何建议,链接,智慧的话等欢迎!

到目前为止,答案非常好,并且澄清了我的一些基本误解.我认为他们也解释了我在哪里挣扎 - 我想也许发布一个更具体的新问题会有所帮助,所以我也会这样做.

functional-programming scala jvm-languages

47
推荐指数
2
解决办法
2万
查看次数

在Java8中引入lambdas会改变或影响哪种GoF设计模式?

许多人声称,GoF设计模式的最大部分只是缺少一流功能的解决方法.既然Java即将获得lambda表达式,那些模式中的哪些将受到它们的影响?哪些可以大大简化或推广?那些基本上会保持不变?欢迎任何实际的例子.

java lambda design-patterns functional-programming java-8

47
推荐指数
2
解决办法
2967
查看次数

使用带有参数数组的Function.prototype.bind?

如何使用参数数组调用Function.prototype.bind,而不是硬编码参数?(不使用ECMA6,因此没有传播运营商).

我试图在使用回调的模块周围放置一个promises包装器,我想绑定传递给我的包装器方法的所有参数并绑定它们.然后我想用我自己的回调调用部分应用的绑定函数,它将解析或拒绝一个promise.

var find = function() {
  var deferred, bound;
  deferred = Q.defer();
  bound = db.find.bind(null, arguments);
  bound(function(err, docs) {
    if(err) {
      deferred.fail(err);
    } else {
      deferred.resolve(docs);
    }
  });
  return deferred.promise;
}
Run Code Online (Sandbox Code Playgroud)

但显然这不起作用,因为bind需要参数而不是参数数组.我知道我可以通过将我的回调插入到arguments数组的末尾并使用apply来做到这一点:

arguments[arguments.length] = function(err, docs) { ... }
db.find.apply(null, arguments);
Run Code Online (Sandbox Code Playgroud)

或者通过遍历arguments数组并为每个参数重新绑定函数:

var bound, context;
for(var i = 0; i < arguments.length; i++) {
   context = bound ? bound : db.find;
   bound = context.bind(null, arguments[i]);
}
bound(function(err, docs) { ... })
Run Code Online (Sandbox Code Playgroud)

但这两种方法都很脏.有任何想法吗?

javascript functional-programming partial-application promise

47
推荐指数
3
解决办法
1万
查看次数

为什么java.util.Collection没有实现新的Stream接口?

我花了一些时间开始研究关于流和lambdas的java-8嗡嗡声.让我吃惊的是,你不能应用流操作,例如.map(),.filter()直接上java.util.Collection.是否存在技术原因导致java.util.Collection接口未通过这些Stream操作的默认实现进行扩展?

谷歌搜索了一下,我看到很多人按照以下模式编码的例子:

List<String> list = someListExpression;
List<String> anotherList = list.stream().map(x -> f(x)).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

如果你的代码中有很多这些流操作,那就变得非常笨拙了.由于.stream()并且.collect()与您想表达的内容完全无关,您宁愿说:

List<String> list = someListExpression;
List<String> anotherList = list.map(x -> f(x));
Run Code Online (Sandbox Code Playgroud)

java lambda functional-programming java-8 java-stream

47
推荐指数
1
解决办法
3445
查看次数