本文最初发布于 Foxhound Systems 网站,经授权由 InfoQ 中文站翻译并分享。
作为一个对数学和编程语言充满激情的人,谁也不能阻止我分享我总结的10个超棒的用于数学的编程语言。 正文共:2619 字 预计阅读时间:7 分钟 作为一个对数学和编程语言充满激情的人,谁也不能阻止我分
---- theme: github 每次看到干尸鬼鲛起舞,都有一种说不出的难受,不行,发出来,让大家一起难受难受~🐶 Haskell 是一门纯的函数式语言。 也就是说计算机主要是通过函数来完成的(像在数学中一样),而不是通过“先做这个,再做那个”的命令式操作顺序进行的(像在主流的编程语言中一样)。—— Simon Peyton Jones 初见😀 什么是 Haskell ?我们从 wiki 上可以找到以下要点: Haskell 是一种标准化的,通用的纯函数式编程语言,有惰性求值和强静态类型; 在H
接上文 《从 Java 和 JavaScript 来学习 Haskell 和 Groovy(引子)》。
这些"奇怪"的点背后隐藏着Ramda 背后"更深"一层的设计, 本文将会对此作出讲解, 并阐述背后通用的函数式编程理论知识.
在我们查阅 Ramda 的文档 时, 常会见到一些"奇怪"的类型签名和用法,例如:
最近有点无聊,突然想试试在各种语言里面实现Y组合子。不过写完之后,没想到结果完全出乎我的意料。嘛,让我们来看看不同语言里的Y组合子。
今日 @开源中国 一则消息引发热议:微软计划将 Rust 作为 C 和 C++ 的安全替代品。
导语 | 在日常开发过程中,若长期使用C++语言,在初次使用Rust的过程中可能会碰到一些问题。本文尝试从C++的角度来说明在使用Rust时需要特别注意的一些地方,特别是其中的思维方式的转变(mind shift)。 一、赋值的move语义 (一)C++ vs Rust C++的赋值操作是copy语义,在不考虑优化的情况下,从语义的角度理解,赋值后内存中的某个对象即变成了两份。修改新的对象并不会对旧对象产生副作用。 而Rust对赋值操作有更加精细的控制,以下两条: 对于所有实现了Copy trai
Haskell是一种纯函数式语言(purely functional programming language),其函数式特性的纯度没有争议
昨天的文章删了,因为我的 vscode 把 markdown 里的 * 自动替换成了 _,导致一些公式的表述变得异常奇怪。另外,原创忘记打开了。
因为前端并不需要对JSON 进行encode/decode , 只需要对JSON string 进行parse.
该文介绍了函数式编程的概念、特点以及Haskell这门函数式编程语言的相关知识。
我在滑铁卢大学的最后一个学期选了CS444:编译原理这门课程,课程项目是编写一个编译器,将Java语言的子集编译成x86代码,三人结组,语言自由选择。
本文作者是高级系统开发工程师 Torbear Gannholm。Torbear 有着 30 多年的开发经验,对技术很深刻的理解。对于什么是好的编程语言,他发表了一篇文章分享了自己的观点。以下是他的全文:
在List场景,xs <*> ys表示从左侧xs中取出函数作用于右侧ys中的每一项,有两种实现方式:
【新智元导读】人工智能(AI)已经成为一个热门话题,也是一个大的研究领域,每个巨头科技公司以及创业公司都在其中努力。这是一个非常广泛的话题,从基本的计算器、自我导航技术到能够彻底改变未来的具有自我意识
Go 语法对第一次接触 Go 的新手来有点怪,因为大家习惯了类 C 语法将类型放在前面的方式,对 Go 将类型放在参数后面有点不习惯,刚开始感觉很别扭,那 Go 设计者是基于什么考量才设计成这样呢?这里我们比较一下 C,Go,Haskell 三者的语法,可以看到其实语言的语法其实都是服务于自己的设计目标的。
这很简单。 那么扩展一下,我们说任何值都可以放到一个上下文中。 现在你可以把上下文想象为一个可以在其中装进值的盒子:
在上一篇文章中,我通过几个Java的例子简单的说明了Monad的本质和一些工程中常见的用途。接下来的文章就不再侧重于工程了,而是要慢慢向理论转换。而作为过渡,我选择了Haskell来代替Java进行说明。本篇文章默认读者已经对Haskell的基本语法有所了解,因此对此类内容我不会再做赘述。
Haskell 值与函数是统一的,函数只是需要其他参数输入的值。如果定义的是函数,那么这个函数的行为在运行过程中也是不会改变的,对于某一个特定的输入返回的结果总是确定的,这样的函数为纯函数。
这是这个系列的最后一篇,从编程范型的角度概览,前面几篇的链接在文章后半部分有汇总。
在程序设计的时候,我们通常希望使用同样的数据结构或算法,就可以处理许多不同类型的元素,比如通用的List或只需要实现compare函数的排序算法。对于这个问题,不同的编程语言已经提出了各种各样的解决方案:从只是提供对特定目标有用的通用函数(如C,Go),到功能强大的图灵完备的通用系统(如Rust,C++)。在本文中,我将带你领略不同语言中的泛型系统以及它们是如何实现的。我将从C这样的不具备泛型系统的语言如何解决这个问题开始,然后分别展示其他语言如何在不同的方向上逐渐添加扩展,从而发展出各具特色的泛型系统。 泛型是元编程领域内通用问题的简单案例:编写可以生成其他程序的程序。我将描述三种不同的完全通用的元编程方法,看看它们是如何在泛型系统空的不同方向进行扩展:像Python这样的动态语言,像Template Haskell这样的过程宏系统,以及像Zig和Terra这样的阶段性编译。
这门语言在数学模型上有着很深的优势,虽然它有很多特性,让人很难接受,随着学习的深入,你才会发现这会多么有趣。
前段时间学了下 Haskell,看完了《Haskell 趣学指南》,刷了一些题,《Real World Haskell》正在看。因为早先看过《SICP》,有点 FP 的基础,平常写 Swift 也喜欢用些 FP 的技巧,所以暂时没有什么特别颠覆性的感觉。最大的感受是,以前对 Functor、Applicative 和 Monad 的理解太片面了。
Null 值由来已久,它最早是由 Tony Hoare 图方便而创造的,后来被证明这是个错误,而他本人也对此进行了道歉,并称之为「十亿美金错误」1。
函数式编程已经存在了60多年,但只有像Google这样的改变游戏规则的企业才会依赖函数式编程,普通程序员对此几乎一无所知。
函数式语言在深度学习领域应用很广泛,因为函数式与深度学习模型的契合度很高,The Beauty of Functional Languages in Deep Learning — Clojure and Haskell 就很好的诠释了这个道理。
表达式是编程语言中最常用到的基础之一,本片让我们来看看在 Haskell 中表达式是怎样的?
monad 是支持>>=操作的 applicative 函子,>>=读作绑定,它的类型是:
语言设计时,可以定义一组forbidden behaviors. 它必须包括所有untrapped errors, 但可能包含trapped errors.
Type Class (类型类) 的概念来自 Haskell,表示一系列函数的集合,在概念上, Type Class 和面向对象领域的泛型接口比较类似。
我记得刚接触计算机的时候,我就受到了两个非常巨大的错误观念的影响,这个观念最初是来自于老师的传授还是学长的教诲已经记不清了,但是直到我工作几年以后,才慢慢有了实际的体会:
近年来,函数式编程发展突飞猛进。探讨该主题的书籍和会议数量激增、Scala 和 Clojure 等语言在快速普及,还有 John Carmack、Bob Martin 等名人的支持,都说明了这一事实。
如果现代Python有一个标志性特性,那么简单说来便是Python对自身定义的越来越模糊。在过去的几年的许多项目都极大拓展了Python,并重建了“Python”本身的意义。 与此同时新技术的涌现侵占了Python的份额,并带来了新的优势: Go – ( Goroutines, Types, Interfaces ) Rust – ( Traits, Speed, Types ) Julia – ( Speed, Types, Multiple Dispatch ) Scala – ( Traits, Sp
在关于软件质量的相关谈论中,我通常会引用一条经验法则。所以,我决定发帖总结一下。我将其称为“软件质量的黄金准则”,因为它简单明了,并且可以广泛使用。
Scala简介和安装 本篇文章为大家介绍以下Scala和Scala的安装以及IDE(eclipse)的使用,虽然这个基本环境没有什么技术含量,但是基本环境做不好,往后探讨再高深的东西,都是白扯,这里的所有Scala使用都是在window环境下的。 ----------目录--------------------------------------------------------- 1.Scala简介和安装 2.Scala语法介绍 3.Scala的函数 4.Scala中的集合类型 --------
一个聪明的人曾经表示,在处理空指针异常之前,你不是一个真正的Java程序员。开玩笑,空引用是许多问题的根源,因为它通常用于表示没有值。Java SE 8引入了一个新的类java.util.Optional,可以减轻其中的一些问题。
像Java或者C#这样强类型的准静态语言在实现复杂的业务逻辑、开发大型商业系统、以及那些生命周期很长的应用中也有着非常强的优势
从硬盘读文件时并不会一次性全读入内存,而是一点一点的流式读取。文本文件的话,默认buffer是line-buffering,即一次读一行,二进制文件的话,默认buffer是block-buffering,一次读一个chunk,其具体大小取决于操作系统
llvm是当前编译器领域非常火热的项目,其设计优雅,官方文档也很全面,可惜目前缺乏官方中文翻译。笔者在学习过程中也尝试进行一些翻译记录,希望能对自己或者他人的学习有所帮助。(PS:初步翻译文档放在github上了,需要可自取,也欢迎提PR共同完善)
引言 Haskell不同于Scala,是一门纯函数式语言,它强制使用者使用函数式语法而没有妥协。 是一门强类型定义的静态类型语言。它的**类型模型基于推断理论(in-ferred)**并被公认为是函数语言中最高效的类型系统之一。你会发现该类型系统支持多态语义并有助于人们作出十分整洁清晰的设计。 支持Erlang风格的模式匹配(pattern matching)和哨兵表达式。你也能在Haskell中发现Clojure风格的惰性求值(lazyevaluation)以及与Clojure和Erlang相同的列表推导
英文原文:Functional Programming Is Hard,That's Why It's Good 很奇怪不是,很少有人每天都使用函数式编程语言。如果你用Scala, Haskell, Erlang,F#或某个Lisp方言来编程,很可能没有公司会花钱聘你。这个行业里的绝大部分人都是使用像Python, Ruby, Java或C#等面向对象的编程语言,它们用起来很顺手。不错,你也许会偶然用到一两个函数式语言特征,例如block,但人们不会去做函数式编程。 然而,很多年来,我
这篇文章综合介绍了四种分类,特别地,为了方便大家快速有效的学习,笔者尝试用思维导图的办法描述编程语言的区别。一般来讲,看第一个图就够了。但如果你想更深入地了解,也可以参考下面的文字表述。
函数式编程的精髓就在于,我们可以用好多好多小小函数,搭搭搭,组成一个个大函数,最终写出整个程序来。比如我们想写一个函数
在进行软件设计的时候,面向接口(trait)编程,会提高程序的扩展性。经过这几天的学习,我们队trait已经有进一步的理解。在实际工程中,合理运用trait,会让我们的代码结构更清晰。
花下猫语:在 Python 中,不同类型的数字可以直接做算术运算,并不需要作显式的类型转换。但是,它的“隐式类型转换”可能跟其它语言不同,因为 Python 中的数字是一种特殊的对象,派生自同一个抽象基类。在上一篇文章 中,我们讨论到了 Python 数字的运算,然后我想探究“Python 的数字对象到底是什么”的话题,所以就翻译了这篇 PEP,希望对你也有所帮助。
在两年半前我写了这篇文章《为什么柯里化是有用的》 ——一些关于在JavaScript中使用柯里化函数的赞美之言。这篇文章轻松成为阅读量最大的一篇,每个月给我带来许多读者。
本文为系列的第一篇文章,试图解答以下问题中的前五个,如果你感兴趣的问题不在其中,请回复评论。
领取专属 10元无门槛券
手把手带您无忧上云