函数式编程-03-让 java 更加函数式
3.1 使标准控制结构具有函数式风格
控制结构是命令式编程的主要组成部分。命令式的 Java 程序员都不会相信无须使用 if···else switch .. ·case for, while do 循环即可编写程序。这些结构是命令式编程的本质。但在接下来的章节中,你将学习如何编写绝对没有控制结构的函数式程序。在本节中,你不会那么激进一一我们只关注以更加函数式的风格来使用传统的控制结构。
...
2020-06-05 09:42:59 |
Pattern
函数式编程-02-函数中的方法
Java 中的函数
在第1 章中,你用了我称之为函数的东西,但实际上它们是方法。
方法是一种在传统的Java 里在某种程度上表示函数的方式。
函数式的方法
一个方法可以是函数式的,只要它满足纯函数的要求:
它不能修改函数外的任何东西。外部观测不到内部的任何变化。
它不能修改自己的参数。
它不能抛出错误或异常。
...
2020-06-05 09:42:59 |
Pattern
函数式编程-02-java 中的函数式接口和 lambda 简介
Java 8 的函数式接口
lambda 被用于接收特定接口的地方, Java 正是以此来决定调用哪个方法的。
Java 并不对命名加以限制,有些语言则不然。
唯一的限制是所用的接口必须要明确,这通常意味着它应该有且仅有一个抽象方法。(实际上会更复杂一些,因为有些方法不算在内。)
这样的接口就是SAM (single abstract method, 单一抽象方法)类型,被称为函数式...
2020-06-05 09:42:59 |
Pattern
函数式编程-01-什么是函数?
本章要点
理解现实世界中的函数
在 Java 中表示函数
使用lambda
使用高阶函数
使用柯里化函数
用函数式接口编程
学习目标
为了理解函数式编程是如何工作的, 我们会使用一些函数式库提供的函数式组件,还有Java 8 标准库里可用的少许组件。
不仅如此,...
2020-06-05 09:42:59 |
Pattern
函数式编程-00-什么是函数式编程
回顾
后来又看了一下这本身,感觉过于学术+偏向于数据结构。
所以感觉不如 《java8 函数式编程》适合学习。
序言
学习 java 函数式编程的目的主要有 2 个:
(1)运用下 jdk8
(2)重新理解这种编程思想
实际上很多东西都要反复学些。
准备工作
你可以同时阅读下列内容:
java8 系列学习
本系列学习方式
(1)以书本为核心,做发散式学习。
...
2020-06-05 09:42:59 |
Pattern
编译原理系列-06-LR
3.3 LR分析
LL(k)预测法的弱点是它必须预测下一个将被使用的产生式,并且需要向前查看一个字符、LR(k)是一个更有效的分析法,它可以在看见与整个产生式相关的所有输人记号以后再做出决定(多于k个记号)。
LR(k)分别代表由左自右的分析、最右推导、向前查看k个记号。最右推导的使用看起来有些奇怪,怎样用最右推导进行由左向右的分析呢?
图3.18说明了在文法3.1程序中的LR分析过程...
2020-06-04 05:34:28 |
Java
编译原理系列-05-Predictive analysis 预测分析
3.2 预测分析
有些文法使用了像递归下降这样的简单算法来简化分析。
实际上,就是把每个文法产生式转换成一个递归函数的子句。
如文法3.11所示。
文法3.11
S→if E then S else S L→end
S→beginS L L→;SL
S→print E
E→num=num
这...
2020-06-04 05:34:28 |
Java
编译原理系列-04-parsing 语法分析之上下文无关文法
语法分析
前儿章讨论过了用符号代替正则表达式的简化机制,这种机制在使用时是很方便的:
digits=[0-9] +
sum=(digits“+") *digits
这些正则表达式定义了28+301+9的和。又如:
digits=[0-9] +
Sum=expr“+"expr
expr="("sum") " | digits
所定义的表达形式如下所示:
(109+23)
61
...
2020-06-04 05:34:28 |
Java