这本书的主题是函数范式(functional paradigm),我们将使用 JavaScript 这个世界上最流行的函数式编程语言来讲述这一主题。有人可能会觉得选择 JavaScript 并不明智,因为当前的主流观点认为它是一门命令式(imperative)的语言,并不适合用来讲函数式。但我认为,这是学习函数式编程的最好方式
2022-06-06 14:45:11 2.2MB js 函数式编程 函数式 函数范式
1
《haskell函数式编程入门》是一本讲解haskell这门经过精心设计和锤炼的纯函数式编程语言的书,同时也是一本通过haskell来讲解函数式编程的方法与思想的书。全书共分三个部分。第一部分介绍函数式编程在解决数学与算法问题的精简与直观的特色,让不熟悉haskell的读者对其建立初步的了解,同时通过解决一些算法问题,如裴波那契数列、八皇后问题、排序问题、24点等,引发一些对函数式编程方式的思考;第二部分介绍一些略微深入的haskell内容,包括函子、monoid、io与monad转换器等;最后一部分则涉及快速测试、惰性求值和并行编程等主题。 《haskell函数式编程入门》既适合对hasell和函数式编程感兴趣的程序员阅读,又适合作为haskell语言入门教程,供计算机科学与数学专业的学生参考。
2022-05-19 16:03:47 58.75MB Haskell
1
java实现验证码源码该存储库包含“Java 中的函数式编程”一书中的代码、练习和解决方案。 连同这本书本身,它是您最接近拥有自己的私人函数式编程导师而实际上没有导师的方法。 项目使用方法 该代码可用作 Gradle 项目,可供以下人员使用: 在终端中运行 Gradle 命令 在 Eclipse 中导入(有限制) 在 IntelliJ 中导入 在 NetBeans 中导入 人们当然可以只使用源文件将它们导入任何其他编辑器和/或从命令行编译和运行它们。 这里不会描述运行 Gradle 命令。 如果您选择这种方式,您应该已经知道如何去做。 下载项目 有两种方法可以下载这个项目。 你可以: 单击此页面上的“下载 ZIP”按钮 () 下载 ZIP 存档,然后将其解压缩到您选择的目录中 或者您可以使用 Git 克隆项目,以便在对项目进行修改或添加时能够轻松更新它。 为此,您需要在 PC 上安装 Git,并使用此页面上SSH 克隆 URL区域中的可用URL 。 导入 Eclipse 注意:Eclipse 与 Java 不完全兼容。 Eclipse 不使用 Oracle 编译器。 Eclipse 使
2022-05-07 09:51:27 1.47MB 系统开源
1
函数式编程 函数式编程是一种编程范式,是一种构建计算机程序结构和元素的风格,它把计算看作是对数学函数的评估,避免了状态的变化和数据的可变,与函数式编程相对的是命令式编程。我们有这样一个需求,给数组的每个数字加一: // 数组每个数字加一, 命令式编程 let arr = [1, 2, 3, 4]; let newArr = []; for(let i = 0; i < arr.length; i++){ newArr.push(arr[i] + 1); } console.log(newArr); // [2, 3, 4, 5] 这段代码结果没有问题,但是没法重用。我们换一个思维,这里面
2022-04-18 14:56:02 143KB c ip log
1
非常不错的一本haskell教材,2019年最新出版,讲了很多实用的东西,比《趣学haskell》更为实用。使用了当前最新的编译器版本。如果感觉好,请购买正版。
2022-04-14 10:56:35 5.89MB haskell 函数式编程
1
Roger Hindley写的lambda演算经典书籍 Combinatory logic and lambda-calculus, originally devised in the 1920s, have since developed into linguistic tools, especially useful in programming languages. The authors' previous book served as the main reference for introductory courses on lambda-calculus for over 20 years: this version, first published in 2008, is thoroughly revised and offers an account of the subject with the same authoritative exposition. The grammar and basic properties of both combinatory logic and lambda-calculus are discussed, followed by an introduction to type-theory. Typed and untyped versions of the systems, and their differences, are covered. Lambda-calculus models, which lie behind much of the semantics of programming languages, are also explained in depth. The treatment is as non-technical as possible, with the main ideas emphasized and illustrated by examples. Many exercises are included, from routine to advanced, with solutions to most at the end of the book.
2022-03-26 20:39:26 251KB Lambda 函数式编程 计算理论 数学
1
很不错,讲述Python函数式编程,有兴趣的朋友可以下载看看
2022-02-20 12:26:43 519KB python
1
《JavaScript ES6函数式编程入门经典》使用JavaScript ES6带你学习函数式 编程。你将学习柯里化、偏函数、高阶函数以及Monad等概念。 目前,编程语言已经将焦点从对象转移到函数。JavaScript支持函数式编 程,并允许开发者编写精心设计的代码。
2022-02-09 14:00:51 46.16MB JavaSc ES6 函数式编程
1
哈斯克尔 Haskell,一种高级的,纯函数式编程语言学习 #100daysofcode挑战的一部分 学习Haskell(纯函数编程)基于项目的方法 为什么选择Haskell? 如果您正在阅读此书,则意味着您对学习Haskell感兴趣。 但是,什么使这种语言特别? 它的编程方法可以概括为五点: Haskell属于功能语言家族, 它的核心体现了纯净的概念,将带有副作用的代码与应用程序的其余部分分开, 评估模型基于懒惰, 类型由编译器静态检查。 此外,Haskell还具有一种类型系统,该类型系统比平时更强大,更具表现力, 它的多态方法基于参数(类似于Java和C#中的泛型)和类型类 为什么要使用纯函数式编程函数式编程是编程的样式或范例之一。 编程范例是由不同编程语言共享的一组思想和概念。 例如,Pascal和C是命令式范例的一部分,而Java和C ++将命令式范例与面向对象的
2022-01-21 22:36:51 3KB Haskell
1
# jdk7新特性 ## try-with-resources 是一种声明了`一种或多种资源的try语句`。资源是指在程序用完了之后必须要关闭的对象。try-with-resources语句保证了每个声明了的`资源在语句结束的时候都会被关闭`。任何实现了java.lang.`AutoCloseable`接口的对象,和实现了java .io .`Closeable`接口的对象,`都可以当做资源使用`。 ``` try ( InputStream is = new FileInputStream("xx"); OutputStream os = new FileOutputStream("xx") ) { //xxx //不用关闭了,JVM帮你关闭流 ``` ## 多异常统一处理 在Java 7中,catch代码块得到了升级,用以在`单个catch块中处理多个异常`。如果你要捕获多个异常并且它们包含相似的代码,使用这一特性将会减少代码重复度。 ``` try { //xxx } catch (AException | BException e) { e.printStackTrace(); } ``` 缺点是异常处理细粒度降低 ## 泛型推导 ``` List list = new ArrayList(); ``` `泛型实例`的创建可以通过`类型推断`来简化,`可以去掉`后面new部分的泛型类型,`只用`就可以了。 ## 使用ForkJoin Java 7开始引入了一种新的Fork/Join线程池,它可以执行一种特殊的任务:把一个大任务拆成多个小任务并行执行。 我们举个例子:如果要计算一个超大数组的和,最简单的做法是用一个循环在一个线程内完成: ```ascii ┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐ └─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘ ``` 还有一种方法,可以把数组拆成两部分,分别计算,最后加起来就是最终结果,这样可以用两个线程并行执行: ```ascii ┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐ └─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘ ┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐ └─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘ ``` 如果拆成两部分还是很大,我们还可以继续拆,用4个线程并行执行: ```ascii ┌─┬─┬─┬─┬─┬─┐ └─┴─┴─┴─┴─┴─┘ ┌─┬─┬─┬─┬─┬─┐ └─┴─┴─┴─┴─┴─┘ ┌─┬─┬─┬─┬─┬─┐ └─┴─┴─┴─┴─┴─┘ ┌─┬─┬─┬─┬─┬─┐ └─┴─┴─┴─┴─┴─┘ ``` 这就是Fork/Join任务的原理:判断一个任务是否足够小,如果是,直接计算,否则,就分拆成几个小任务分别计算。这个过程可以反复“裂变”成一系列小任务。 我们来看如何使用Fork/Join对大数据进行并行求和: ``` public class Main { public static void main(String[] args) throws Exception { // 创建2000个随机数组成的数组: long[] array = new long[2000]; long expectedSum = 0; for (int i = 0; i < array.length; i++) { array[i] = random(); expectedSum += array[i]; } System.out.println("Expected sum: " + expectedSum); // fork/join: ForkJoinTask task = new SumTask(array, 0, array.length); long startTime = System.currentTimeMillis(); Long result = ForkJoinPool.commonPool().invoke(task); long endTime = System.currentTimeMillis(); System.out.println("Fork
2022-01-13 20:03:17 1.51MB jdk8 lambda 函数式编程 stream
1