Python具备函数式编程的许多核心特征,因此可以借鉴其他函数式语言的设计模式和编程技术,编写出简洁优雅的代码...
本书全面地介绍Scala这种针对JVM的编程语言,它集成了现代对象模型、函数式编程和先进类型系统的所有优势。本...
本书每一章都会给出各种函数式编程思维的示例,并用Java 8或其他具备函数式能力的JVM语言代码实现出来。改变...
本书向读者展示了如何采用函数式方案来替代或最大程度地简化在面向对象编程中所使用的许多常 用模式,同时还介绍了...
推荐: “Venkat以一种易于理解、讲求实效的方式为Java程序员介绍了Scala编程。这本书涵盖了Sca...
《Haskell趣学指南》是人民邮电出版社信息技术分社今年一月出版的“新锐编程语言集萃”丛书中的一本。该丛书中还有《D程序设计语言》。我在去年六月写了一篇文章:[《D程序设计语言》中的低级错误](/article/4533… ...
问题 《魔力 Haskell》第 17.2 节提到: 八皇后问题最早由棋手马克斯·贝瑟尔于 1848 年提出。之后,陆续有数学家对其进行研究,其中包括高斯和康托,并将其推广为更一般的 n 皇后摆放问题。 八皇后问题是一个以国际象棋为背景的问题:如何能够在 8×8 的国际…...
在出版了《魔力Haskell》之后,我在滴滴组织了滴滴FP交流群,并开始了推广Haskell的课程,一到两周更新一期。目前已经录制的视频可以在这里收看: haskell系列教程1 @ 滴滴FP 基础语法-模式匹配-STG执行模型 [haskell系列教程2 @滴滴FP 函数…...
前段时间在读《魔力Haskell》,已经读到 220 页,读完前 21 章。期间提交了不少勘误,同时还手工编写了一个索引。近期都没空继续读这本书。所以先将我整理的索引公布如下,仅供参考。 Update 2017-01-09: 已经完成索引。 ! 212-214,238 !!…...
题目 Problem 500. Problem 500!!! The number of divisors of 120 is 16. In fact 120 is the smallest number having 16 divisors. Find the sma…...
1.代码注释 --单行注释 {- 一段注释 -} 2.表达式:有值(value)的式子,例如: 1, x+3, True, sort [2,4,6,1] 3.声明:一个完整的Haskell程序由若干声明组成 类型声明:Haslell是一门强类型语言,所有表达式…...
列表是Haskell中非常重要的数据结构,理解列表,是理解Haskell控制结构的第一步. 1.列表:[ ]包围在参数外层的一个特殊构造语法 data [a] = a : [a] | [] --[1,2,3]== 1 : 2 : 3 : [] : 是一个中缀构造函数 …...
1.元组(): 元组不算是Haskell中用得最多的数据结构,因为我们可以自定义数据类型来达到更好的效果,但元组捕捉了乘积类型(Product)的本质:多元组的类型取决于组成元组的每个类型,总的类型个数等于每个元素的类型个数乘积。定义如下 data () = () dat…...
1.应用函数$和& $和&函数的作用在于把左边和右边的表达式都加上括号,他们的应用在于它的优先级较低,因此可以简化写出极简却又复杂的代码,应该注意的是$是右结合的,&是左结合的。 ($) :: (a -> b) -> a -> b …...
列表的定义限定了列表中的类型一定都是相同的。 1.映射 把从a到b的函数映射成了从[a]到[b]的函数,这个函数保留了元素的一一对应关系。 map :: (a -> b) ->[a] -> [b] map _ [] = [] map f (x:xs) =…...
类型类typeclass是Haskell中最出名的魔法之一。类型推断系统System FC with roles。 类型类的实现包括类型声明和实例声明两部分。 1.实例声明 instance declaration 在第二章data时的例子中 data Position…...
Haskell中基本的判断大小、数值运算等都不是语法结构,而是通过函数实现的,本章介绍与之相关的类型类和常用的函数。 data和类型约束:永远不要在你的数据类型声明前加上类型类的约束。类型约束应该应该用来约束普通函数的参数类型,进而帮助编译器确定函数的行为,而不是约束数据的行…...
1.类型别名 type 和data不同,type是一个轻量型的语法,它仅仅是给已经存在的类型提供了一个不一样的名字,不会定义新的构造函数 在类型检查时,这个“新”的数据类型和type指代的类型完全等价,编译器不会区别 type类型别名声明常常用语简化类型的书写 type …...
本章主要介绍如何书写、管理和注释程序模块。 1.模块语法 模块:值、类型、类型别名、类型类等的集合 在模块内部,通过import可以把其他模块中的值和类型等导入到当前模块的环境中,从而被当前模块使用,同时模块也会导出一些内部的值和类型等,使其他模块得以使用 模块是代码复用…...
函子是Haskell中最基本的类型类之一,抽象的概括。 1.容器抽象 someFunction :: f a -> f b - 其中,f是一个类型变量,例如列表或Maybe someFunction :: a -> b -- 处理单独元素 的函数 fmap …...
题目 Problem 604. Convex path in square Let F(N) be the maximum number of lattice points in an axis-aligned N × N square that the graph of…...
图灵教育的编程日历(其实是周历)每周使用一种程序设计语言以“YYYY-MM-DD”格式输出当天的日期。注意:这里的当天是指程序运行时的日期,而不是编程日历中的日期。10月份的第4周是 Haskell 语言: ![][1] ![][2] ![][3] 但是,这个程序是有问…...
操作复杂数据结构的首选方案:透镜组(使用函子抽象来构造数据操作函数) 1.getter和setter getter和setter并不是Haskell中出现的概念,而是很多面向对象语言中用来操作对象实例的一个语法,例如:JavaScript中 position = {x…...
作为函子的子类类型,应用函子概括了某些函子的额外特性:把函子里的函数作用到函子里的值。 1.函子的局限 函子抽象提供了fmap函数,用来把普通函数升格成可以操作函子容器的函数。例如我们可以把所有能出来a类型的函数升格成处理 Maybe a类型的函数 现假设有一个a->…...
1.单位半群 Monoid 凡是包含一个二元运算和这个运算对应的单位元的倒数结构都叫做单位半群:结合律和单位元 Haskell中使用类型类Monoid来描述这个数学概念 class Monoid a where mempty :: a --Identity of mapp…...
1.参数解析 解析器 parser 指的是从序列化之后的类型中提取出需要的数据类型的一类函数 对于简单的解析工作,可以使用Either数据类型以及他的应用实例 data Either a b =Left a | Right b instance Functor (Ei…...
单子是Haskell 中最出名的类型类,它捕捉了一类特殊的函子上下文操作:把两层函子包裹合并为一层。单子大大改变了函数式编程的体验,是Haskell的核心抽象类型类。 1.应用函子的局限 当计算被升格到函子的范畴后,这个计算就被确定了 而实际中常常需要根据上一步技术的结果…...
1.列表单子 instance Monad []where return x = [x] x >>= f = concat $ fmap f x GHCi中输入对行排版的代码 ![enter image description here][1] 列表归纳 …...
1.(->)a的单子实例声明 instance Monad ((->) r) where return = pure --return x = \x -> x --(>>=) :: (r -> a) -> (a -> r -&…...
Haskell中只有绑定没有变量带来了许多好处,但是仅依靠函数组合,一些依赖状态变换的算法变得难以书写。 1.什么是State单子 把状态转换过程的抽象,oldState对应老的状态,经过某一函数的计算,得到一个计算的结果someValue和一个新的状态newStateo…...
IO是运行程序和计算机外部世界交互的单子类型。IO也是State单子的一个非常特殊的情况。 1.IO单子的本质 ghc-prim函数库 newtype IO a = IO (State# RealWorld -> (# State# RealWorld, a #)…...
之后的章节将介绍高级类型类和实际应用中的实践。 1.语言扩展 Language Extension 打开某个语言扩展 +源代码顶部加入以下代码,它在该文件内生效 {-# LANGUAGE Extension #-} +在GHCi中使用:set -XExtensio…...
1.Foldable Foldable 是约束最少的类型类,它要求提供一个把数据结构折叠成值的函数,这个函数可以看作对列表的折叠操作的推广 class Foldable t where fold :: Monoid m => t m -> m fold = fo…...
很多编程语言中,数组和散列表常常当作标准的数据结构被广泛使用。而在Haskell中,由于数据是很多抽象的核心,所以很多函数库提供了大量不同特性的数据结构(immutable and mutable)。 1.列表 immutable Haskell中常当作循环控制结构,底层…...
单子变换要解决的核心问题:如何组合不同的单子上下文来获得新的单子实例。 1. Kleisli范畴 ![enter image description here][1] 连接单子运算的函数 (>=>) :: (a -> [b]) -> (b -&g…...
单子变换就是一类函数,用来把单子m包裹成单子t m,同时声明在这种情况下对应的单子实例。 实际当中,我们常遇到多个单子变换叠加的情况,分析单子变换的类型时,按顺序来看 我们把通过叠加单子变换得到的单子叫单子栈 monad stack 问题是:当单子变换的层级变深时,lift操…...
base——String [Char],bytestring——ASCII,test——Unicode字符串 1.bytestring函数库 处理二进制数据 vector函数库中Vector表示这样的类型 Char默认表示Unicode编码的字符,所以用Word8来代替C…...
由不同类型元素组成的列表——异类表的相关问题 1.Typeable和Dynamic Data.Typeable模块 ![enter image description here][1] --获取类型信息的方法 typeOf :: forall a. Typeable …...
<interactive>:1:1: error:
• Variable not in scope: sort :: [Integer] -> t
• Perhaps you meant ‘sqrt’ (imported from Prelude)
英文意思能看明白,我却不知道该如何下手……