Tag: 函数式编程

为什么懒惰评估有用?

我一直在想,为什么懒惰的评估是有用的。 我还没有任何人以一种合理的方式向我解释; 大多数情况下,它最终会熬到“相信我”。 注意:我不是指记忆。

Haskell有什么大惊小怪的?

我知道有几个程序员在他们之间一直在讨论Haskell,所以大家似乎都喜欢这种语言。 擅长哈斯克尔似乎有点像天才程序员的标志。 有人可以给出几个Haskell的例子,说明为什么它如此优雅/优越?

为什么没有在Go的generics?

免责声明:我现在只玩了一天,所以很有可能我错失了很多。 有谁知道为什么没有真正的支持generics/模板/ whats inAName在Go? 所以有一个通用map ,但这是由编译器提供的,而Go程序员不能编写自己的实现。 所有关于使Go尽可能正交的讨论,为什么我可以使用generics而不是创build一个新的? 特别是当涉及到函数式编程时,有lambda函数,甚至闭包,但是对于一个缺乏generics的静态types系统,我该如何编写像filter(predicate, list)这样的通用高阶函数呢? 好的,链接列表等可以用牺牲types安全性来完成。 对于SO / Google的快速search没有透露任何见解,它看起来像generics,如果有的话,将被添加到Go作为事后的想法。 我确实相信汤普森比爪哇人做得更好,但是为什么要把generics放在一边呢? 还是他们计划,只是没有实施?

我如何在现实世界中使用函数式编程?

函数式语言是很好的,因为它们通过消除状态来避免错误,还因为它们可以自动方便地自动并行处理,而不必担心线程数量。 作为一名Win32开发者,我可以使用Haskell来处理我的应用程序的某些dll吗? 如果我这样做,是否有一个真正的优势,会自动采取我? 如果是这样,那么编译器呢? F#能够并行处理您为多核心和cpu自动编写的函数吗? 你会看到任务pipe理器中的线程数增加吗? 基本上我的问题是,我如何以一种实用的方式开始使用Haskell,如果我真的能看到一些好处吗?

Haskell:什么是“解除”?

我不明白“解除”是什么。 在理解什么是“电梯”之前,我应该先了解Monad(我对Monad还完全无知:)。 或者有人可以用简单的话向我解释?

我为什么要学习Lisp?

我真的觉得我应该学习Lisp,并且有足够的资源来帮助我做到这一点。 我不会因为复杂的语法而拖延,但是在“传统的商业编程”中,我会发现使用它来代替程序语言是有意义的。 那里有一个用Lisp编写的商业杀手级应用程序吗?

Java SE 8是否有对或元组?

我在Java SE 8中玩懒惰的函数操作,我想将索引i map到一个pair / tuple (i, value[i]) ,然后基于第二个value[i]元素进行filter ,最后输出只是指数。 我还必须忍受这个问题: 什么是Java中的C ++ Pair <L,R>的等价物? 在大胆的lambda和stream的新时代? 更新:我提出了一个相当简单的例子,在下面的答案之一中有@dkatzel提供的整洁的解决scheme。 但是,它并没有概括。 因此,让我加一个更一般的例子: 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, […]

使用reduce()的有用代码?

有没有人在这里有任何有用的代码,在python中使用reduce()函数? 除了我们在例子中看到的通常的+和*,还有其他的代码吗? 参考GvR 在 Python3000 中reduce()的命运

了解为什么Zipper是一个Comonad

这是对我以前的问题的回答。 假设我需要将函数def f(a:A, leftNeighbors:List[A]): B并且生成List[B]每个项目a:A List[A]映射到b:B . 显然,我不能只是在列表中调用map ,但我可以使用列表拉链 。 拉链是一个在列表中移动的游标。 它提供对当前元素( focus )及其邻居的访问。 现在我可以用def f'(z:Zipper[A]):B = f(z.focus, z.left)来代替我的f ,并将这个新函数f'传递给Zipper[A] cobind方法。 cobind工作原理是这样的:它用拉链调用f' ,然后移动拉链,用新的 “移动”拉链调用f' ,再次移动拉链等,依此类推…直到拉链到达名单末尾。 最后, cobind返回一个types为Zipper[B]的新拉链Zipper[B] ,它可以转换成列表,这样问题就解决了。 现在注意cobind[A](f:Zipper[A] => B):Zipper[B]和bind[A](f:A => List[B]):List[B]之间的对称性bind[A](f:A => List[B]):List[B] Monad和Zipper是Comonad 。 是否有意义 ?

初学者指南Haskell?

我一直在寻找一个体面的指导Haskell一段时间,但一直没能find一个似乎有趣的阅读和/或有意义的。 几年前,我曾经接触过Haskell,但我不记得太多。 我记得“啊哈” – 当我终于明白了,感觉是不可思议的,玩起来真的很有趣,所以我正在寻找重新发现哈斯克尔失落的艺术。 我熟悉Ruby和它的函数式编程技巧,所以我认为我并不是完全处于黑暗之中。 任何链接?