Tag: 函数式编程

在(function)编程的背景下,“具体化”和“具体化”是什么意思?

我在关于haskell和函数式编程的博客 (特别是在sigfpe的博客 )中阅读了很多关于这个术语的文章,但是我不知道它的含义。 我大部分时间都不知道,但是如果我知道的话,我可能会更好地理解这些文本。 谷歌没有帮助我。 我迷上了技术的东西。 而且,这个世界的非技术含义(“转向抽象的具体”)并不能帮助我理解它在代码中的实际意义。 我对计算机科学概念有点慢,所以用代码的实际例子会很好。 :P

recursion计划的傻瓜?

我正在寻找一些非常简单,易于理解的recursionscheme和核心引力scheme(变形,变形,变形等)的解释,它们不需要大量的链接,也不需要打开类别理论教科书。 我确信我已经在无意识中重塑了许多这些scheme,并在编码过程中将它们“应用”在我的头脑中(我相信我们中的许多人都有),但是我不知道(共)recursionschemeI使用被称为。 (好的,我撒谎了,刚才我刚刚读到了其中的几个,这引发了这个问题,但在今天之前,我没有任何线索。 我认为这些概念在编程社区中的传播受到了可怕的解释和例子的阻碍,例如维基百科,还有其他地方。 也可能被他们的名字阻碍了。 我认为还有一些其他的math名称(有关香蕉和铁丝网的东西?),但我不知道我使用的recursionscheme的名字是什么。 我认为这将有助于使用代表简单现实世界问题的数据types的示例,而不是像二叉树这样的抽象数据types。

你为什么决定“反对”使用Erlang?

你真的“试过”(意味着编程,而不只是读一篇文章)Erlang,并决定反对它的一个项目? 如果是这样,为什么? 此外,如果您select回到您的旧语言,或者使用F#,Haskell,Clojure,Scala或其他function语言,那么这也是非常重要的,并说明原因。

我可以在Scala中压缩两个以上的列表吗?

鉴于以下Scala列表: val l = List(List("a1", "b1", "c1"), List("a2", "b2", "c2"), List("a3", "b3", "c3")) 我怎样才能得到: List(("a1", "a2", "a3"), ("b1", "b2", "b3"), ("c1", "c2", "c3")) 由于zip只能用来组合两个列表,我认为你需要以某种方式迭代/减less主列表。 毫不奇怪,以下是不起作用的: scala> l reduceLeft ((a, b) => a zip b) <console>:6: error: type mismatch; found : List[(String, String)] required: List[String] l reduceLeft ((a, b) => a zip b) 任何build议一个如何做到这一点? 我想我错过了一个非常简单的方法来做到这一点。 更新:我正在寻找一个解决scheme,可以采取每个M元素的N列表列表,并创build一个M […]

Mathematica:什么是符号编程?

我是斯蒂芬·沃尔夫勒姆(Stephen Wolfram)的忠实粉丝,但是他绝对不会害羞。 在许多参考文献中,他将Mathematica作为一种不同的符号编程范例来颂扬。 我不是Mathematica用户。 我的问题是:这是什么符号编程? 它和function语言(如Haskell)相比如何?

为什么用函数式语言编写一个编译器更简单?

我一直在想这个问题很长,但真的无法find答案在谷歌以及在Stackoverflow类似的问题。 如果有重复,我很抱歉。 很多人似乎都认为用OCaml和Haskell等函数式语言编写编译器和其他语言工具要用命令式语言编写它们会更加高效和容易。 这是真的? 如果是这样的话 – 为什么使用函数式语言而不是像C这样的命令式语言来编写它们是如此高效和容易呢? 另外 – function语言中的语言工具是否比C语言中的低级语言要慢?

我怎样才能使用地图,并在斯卡拉接收索引?

是否有任何内置的列表/序列的行为像map并提供元素的索引?

工人的组合者的解释

什么是组合器? 它是“一个没有自由variables的函数或定义”吗? 或者怎么样呢?根据约翰·休斯 ( John Hughes)在他着名的关于箭头的论文中, “一个组合器是一个从程序片断中构build程序片断的函数” ,这是有利的,因为“…程序员使用组合器构造大部分期望的自动编程,而不是手写每一个细节“。 他继续说, map和filter是这种组合filter的两个常见的例子。 一些符合第一个定义的组合器: 小号 ķ ÿ 其他人从模拟一只知更鸟 (我可能是错的 – 我没有读过这本书) 一些符合第二个定义的组合器: 地图 过滤 折合/减less(推测) 任何>> =,撰写,fmap ????? 我对第一个定义不感兴趣 – 那些不会帮助我写出一个真正的程序(+1,如果你说服我,我错了)。 请帮我理解第二个定义 。 我认为map,filter和reduce是有用的:它们允许我在更高层次编程 – 减less错误,缩短和更清晰的代码。 以下是关于组合器的一些具体问题: 什么是更多的组合器例如地图,filter? 编程语言经常使用什么组合器? 组合器如何帮助我devise更好的API? 我如何devise有效的组合器? 什么是类似于非函数式语言(比如Java)的组合器,或者这些语言用什么来代替组合器? 更新 感谢@CA McCann,现在我对组合器有了更好的理解。 但是有一个问题对我来说仍然是一个棘手的问题: 使用组合器编写的函数式程序与不使用大量组合式程序之间的区别是什么? 我怀疑答案是,组合型的版本更短,更清晰,更一般,但如果可能的话,我希望能够进行更深入的讨论。 我也在寻找更多的常用编程语言中复杂组合器的例子和解释(比fold更复杂)。

参数的sorting,以利用咖喱

我有两次最近重构的代码,以改变参数的顺序,因为有太多的代码,像flip或\x -> foo bar x 42黑客发生。 当devise一个函数签名时,哪些原则会帮助我充分利用currying?

为什么JavaScript中的不变性如此重要(或需要)?

我目前正在研究React JS和React Native框架。 当我读到Facebook的Flux实现和Redux实现时,我遇到了Immutability或Immutable-JS库 。 问题是,为什么不变性如此重要? 什么是错误的变异对象? 它不是简单吗? 举一个例子,让我们考虑一个简单的新闻阅读器应用程序。 开幕式是新闻头条列表视图。 如果我最初设置一个带有值的对象数组 。 我无法操纵它。 这就是不变性原则所说的,对吗?(如果我错了,请纠正我)。 但是,如果我有一个新的新闻对象,必须更新? 通常情况下,我可以刚刚添加对象到数组中。 我在这种情况下如何实现? 删除商店并重新创build它? 是不是将一个对象添加到数组中一个更便宜的操作? PS:如果这个例子不是解释不变性的正确方法,请让我知道什么是正确的实际例子。 我正在努力学习这里的东西。 请赐教:)