首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

成为函数式编程工程师四年,我为什么说它既“流氓”又“可爱”

不可变的数据结构 FP 中经常使用,让你不必时刻担心代码会对传递的数据做什么奇怪的事情。在这个 Java 应用,我发现了大量“防御性复制代码”。...在这个 Java 应用程序,我将很多有状态的函数转换为无状态的函数,让代码更加简洁,并修复了一些错误。...此外还有其他的一些好处(当然也有缺点),但总的来说,在这个 Java 应用程序,我能够用较少的代码行修复错误并实现大量的新功能。我的经验,这是很常见的收益。 这些好处是众所周知的。...“流氓”的函数式编程 为了说明我的观点,我决定在函数式编程语言 Haskell 实现快速排序。...如果你了解 Haskell 的语法,它就很容易理解,而且没有什么排序代码比它更容易维护的了(好吧,filter 确实应该被 partition 取代,因为 filter 会破坏信息;使用 filter

29720

从 Java 和 JavaScript 来学习 Haskell 和 Groovy(DSL)

,要对数据集合的元素做什么样的操作。...考虑一下排序的经典例子,可以自定义 Comparator 接口的实现,从而对特定对象列表进行排序。...比如 Categories,这个,我在前面一篇 《元编程》已经介绍过了。 最后来说 Haskell。...前文已经介绍过了高阶函数的使用,但是 Haskell ,所有的函数都可以理解为,每次调用最多都只接受一个参数,如果有多个参数怎么办?...因为对于常规语言,如果面临递归工作栈过深的问题,可以优化为循环解决问题;但是 Haskell ,是没有循环语法的,这就意味着必须用尾递归来解决这个本来得用循环才能解决的问题。

44310

2017最受欢迎人工智能编程语言:Python第一,R并未上榜

由于函数编程和静态,代码可以轻松地云上的不同CPU上执行。行业采用方面,Facebook使用Haskell打击垃圾邮件。 6. JavaScript ?...JavaScript,学习对话模型并不重要。学习服务器端的数据,然后通过Ajax调用学习者进行预测。...例如,Prolog,更容易表达对象之间的空间关系,比如表达“绿色的三角形蓝色的后面”。说明一般规则也很简单,例如表达“对象A比对象B更靠近人,而B比C更近,则A应该比C更近”。...C ++比其他语言更快——它在硬件层进行通信的能力允许你改进代码执行时间。这对在意耗时的人工智能项目非常有用。它可以用于统计AI方法,如神经网络的。...Python,几乎所有的想法都可以通过30-40行代码快速验证。

2.3K60

为什么 Haskell 是我们构建生产软件系统的首选

例如,撰写 Haskell 时,无需担心以下问题: 我是否需要检查这个字段是否为空? 如果请求负载缺少字段怎么办? 这个字符串已经被解码为整数了吗? 如果无法将这个字符串解码为整数怎么办?...类型签名甚至可以用来 Haskell 代码的整个语料库搜索相关函数。...以纯函数式风格编写代码具有很多好处,并且有利于打造井井有条的代码库。 “纯函数式编程”的“纯”这个概念很重要。从这个意义上讲,纯度意味着我们编写的代码是纯净的,或者说没有副作用。... Haskell 开发应用程序时,我们通常只一个窗格打开一个带有文本编辑器的终端,然后另一个窗格打开 ghcid。...开发过程,除了紧密的反馈循环外,Haskell 代码还易于重构和修改。就像用其他任何语言编写的现实世界代码一样,用 Haskell 编写的代码也不会写一次就完事。

1.3K10

程序员的心理疾病

其实对于一个物理学家,他心目中知识的价值是这样排序的: ? COBOL 在那么靠前的位置我觉得是用来搞笑的,不过你大致看到了很多 IT 技术真正的科学家眼里的价值和它们的有效期。...引难为豪 IT 行业里批评一个技术难用,是一件非常容易伤自尊的事情,因为立马会有人噼里啪啦打出一些稀奇古怪的命令或者一大篇代码,说:就是这么简单!...如果 Haskell 有一天像 Java 一样如日中天(当然不大可能),肯定对大部分问题的答案也就是“去读API!”其实它已经向这一步发展了。...其结果是,人类的文明因为这些文章,程序员的世界里倒退了几十甚至几百年。很多外行人人不喜欢跟程序员说话,叫他们是 nerd,就是这个原因。 ?...它们我眼里只不过是临时拿来用一下的工具,可是我仍然能用它们写出一流的代码。 看到这些宗教性质的聚会,我终于理解了一些地区是如何被从一个国家分裂出去,最后沦落为另外一个国家殖民地的。

62810

从素数生成看Haskell的简洁性

最近有空就在看Haskell,真是越看越觉得这个语言有意思。知乎(原回答@阅千人而惜知己的)找到了一份很有意思的求素数代码,非常简洁,我觉得很能体现这个语言的特点。...这里提及一下,[2..]是Haskell列表的一个神奇的特性,即支持无限列表。这个Haskell的lazy特性有很大的关系。...类似的算法CPP可以这么表示: bool primes[maxn]; for (int i = 2; i < sqrt(maxn+0.5); i...的确,处理诸如递归这种问题上,FP总是能用短小精悍的代码众多语言中脱颖而出。...虽然说这样高度精简的代码由于不直观,并不太适合在实际的项目中使用,况且其他语言的稍长的代码甚至可能在效率上更优,但这仍不影响Haskell表现其独有的简洁及优雅的魅力。

29810

Heskell与函数式编程

导语 :这个系列打算分为三部分,由浅入深地介绍所谓的函数式编程 1)Haskell入门 2)Monad介绍 3)函数式编程的思想 Haskell简介 Haskell诞生于1990年,是一门纯函数式编程语言...然后看下Haskell这个问题的处理: ?...就一行代码,涉及了三个函数 1)filter :从价格集合筛选出大于20的价格,形成新的集合 2)map:对1产生的新集合进行变换处理,这里的处理是每个元素*0.9,也就是打九折 3)sum:对2产生集合进行求和处理...我的电脑是Windows,Windows下打开cmd,输入ghci,就能进入编程界面,在这个界面能够进行简单的编码,比如下面: ? 这里简单的进行了一次 3+5的求和操作。...这段代码定义了一个函数findMax,输入两个数字x和y,输出x和y的最大值,这里要注意下haskell内if else语句else是不可或缺的,不像JAVA可以只写if不写else。

79470

Haskell

Haskell是一种标准化的、通用纯函数式编程语言,有非限定性语义和强静态类型,Haskell,函数是一等公民。...ghc包含了三个主最要的部分: ghc 编译器 ghci 交互式解析器和调试器 runghc 以脚本的方式运行Haskell 而我们即将学习的起点就是ghci来练习Haskell的基本语法。...这个项目,有趣的地方在于很多审计需要符合科学与哲学,它要解决的问题很像是比特币+以太坊,很有意思的是它通过民主投票的方式来解决分歧,我很喜欢这个特性,我们持有的Cardano代币,就能让我们进行投票,并且这不是损耗...回归语言Haskell,函数式的编程其实有一点上,大家都很清楚,用很少的代码来完成一件事情。Haskell还可以定义跟数学的过程一一对应,这就很有意思了。...我们知道计算机学科其实也是一门数学学科,你想想,能跟数学的过程一一对应的语言,研究领域,得多牛逼。

82830

Debian 7上的Yesod,Nginx和MySQL(Wheezy)

该标志--reorder-goals试图根据某些启发式重新排序目标。它可能使回溯更快。如果你不添加这个标志,cabal可能会进入某些“坏”搜索分支,并在这里浪费大量的时间和内存。...您可能会注意到“沙盒”版本yesod-platform可能比我们在上一节安装的版本更新,因为沙箱,cabal较小的树上搜索解决方案,因此结果可能会更好。...本节,我们将介绍一种将您的站点部署到Nginx的方法。 准备Yesod 部署之前,您需要准备要部署的文件。.../configure && make从源代码构建Unix包的标准方法。但是不要跑到cabal install这里!此命令将您的应用程序安装到其沙箱,这不是我们想要的。...我们只会/var/myblogProduction环境运行,所以我们只需要修改这个设置文件的最后三行: /var/myblog/config/settings.yml1 2 3 Production

79520

从 Java 和 JavaScript 来学习 Haskell 和 Groovy(汇总)

这是这个系列的最后一篇,从编程范型的角度概览,前面几篇的链接在文章后半部分有汇总。...Java 和 JavaScript 位列其中,从表的分别可以看出二者的分别:因为 Java 有线程的概念,可以写并发编程范型的代码;有泛型的定义,可以进行泛型编程;有专门的 Class 类,可以反射和自省...这里提到 “多范型”,其实这个概念定义也不精确,大致来说,除了 Haskell,我们今天讨论的三门其它的语言,都算是多范型的编程语言。例如用 Java 也可以写函数式编程的代码,但是需要避免使用状态。...擅长表现面向对象的范型,限制也很多,不容易搞破坏,但是讽刺的是,它本身却存在非对象的原语类型,就是 int、float、double 等等这些东西,这个不足 Groovy 中被修复。...Groovy 包含 Java 一切包含的东西,但是由于语言灵活,特别是动态语言的特性,很多范型编程上面更有优势,比如面向切面编程。之前介绍过的元编程, Groovy 里发扬光大。

48610

11月编程语言排行榜,Java第一,iOS真的没人要了?

老九学堂 你身边的IT导师 11月编程语言排行榜 Java稳居第一,Python超越C#排名第四,而Perl、PHP 排名均有所下滑,其他脚本语言也逐渐走出前 20 名,甚至传说中最文青的语言 Haskell...被踢出 Top 50; 另一方面,今年年初,Swift 语言 TIOBE 指数排行榜中曾一度进入前十名。...大型语言的优势: 另一方面,面对脚本语言存在的威胁,静态类型语言对它们类型方面的繁琐操作进行了简化:它们都以 C# 的“var”关键字开始,接着是 Java 的类型推断和 C++ 的自动指定符。...Top 10 编程语言 TIOBE 指数走势(2002-2016) 其它语言排名 第 21-50 名如下,可能存在遗漏: 第 51-100 名如下,由于它们之间的数值差异较小,仅以文本形式列出(按字母排序...请注意这个排行榜只是反映某个编程语言的热门程度,并不能说明一门编程语言好不好,或者一门语言所编写的代码数量多少。

87590

基础语法_Haskell笔记1

* y 形式与函数调用差不多,函数名加空格分隔的参数列表,=后面是函数体 2个特点: 声明顺序无所谓 函数名首字母不能大写,不能数字开头 P.S.数学里把相似的东西用x x' x''的命名习惯表示,Haskell...里也可以这样做: y x = x ^ 2 y' x = x ^ 2 + 1 另外,中缀形式转换函数声明也可以用: x `mod'` y = x - (x `div` y) * y 一些场景下能够提升函数声明的可读性...无参函数 常量可以理解成无参函数,例如: > :t 2 2 :: Num t => t 或者更生动的例子: -- 无参函数,就是const two = 1 + 1 匿名函数 匿名函数即函数表达式,Haskell...(10, 50) sArea = show area -- 可以定义函数 addSpace s = ' ' : s -- where可以嵌套,辅助函数定义辅助函数...、where、let、List Comprehension等特定场景) 六.数据结构 List Haskell的List是单一类型数组,例如: emptyArr = [] numbers = [1,

1.8K30

125. 精读《深度学习 - 函数式之美》

and Haskell 就很好的诠释了这个道理。...然而在生产环境,基于 性能和安全性 的考虑,一般会使用函数式语言 Clojure 或 Haskell。 在生产环境,可能要并发出里几百万个参数,因此面临的挑战是:如何高效、安全的执行这些运算。...(refs),同时创建了多个线程自增这个引用对象,按理说每个线程都修改这个引用会导致竞争状态出现,但从结果来看是正常的,说明 Clojure 引擎执行时会自动解决这个问题。...代码和阅读数学公式一样轻松。...3 总结 本文介绍了为什么深度学习更适合使用函数式语言,以及介绍了 Clojure 与 Haskell 语言的共性:安全性、高性能,以及各自独有的特性,证明了为何这两种语言更适合用在深度学习

39310

热爱函数式的你,句句纯正的 Haskell【类型篇】

我们从 wiki 上可以找到以下要点: Haskell 是一种标准化的,通用的纯函数式编程语言,有惰性求值和强静态类型; Haskell,“函数是第一类对象”。...我们在下一小节做更为细致的说明“类型类”~ 类型别名 一个数据的类型可以由多个其他的类型组成, Haskell ,可以用 type 关键字将这些复杂的类型替换成为其他简单的名字; Prelude>...控制台输入 :t 5 查看输出: Prelude> :t 5 5 :: Num p => p 5 是 Num 类型类,这个数可以是整数,也可以是小数或其他数类型; => 是类型类的限定符号; Haskell...,如果定义了一个新的类型,只要这个类型实现了类型类声明的函数这个类型就属于该类型类了; 小结 入门第一篇,类型程序语言中非常重要!...,以及类型类底下的各种函数,真的太好用了吧~ 不用理会类型转换,特别是像 js 的隐式转换,真的太爽了~ 逐渐学习的过程,不断提升强类型设计精髓的理解。

92630
领券