一个类的构造比较复杂,比如有20个参数。比如除法操作类,需要初始化的参数有精度,四舍五入、向下取整还是向上取整等等。有10个客户端,原来要写10次。工厂模式 首先 是封装类的...
一个类的构造比较复杂,比如有20个参数。比如除法操作类,需要初始化的参数有精度,四舍五入、向下取整还是向上取整等等。有10个客户端,原来要写10次。工厂模式 首先 是封装类的...
最近在CR一段代码时候,碰到了一个很尴尬的事情,重写代价有点高,毕竟现在它能跑起来,开发、测试都是成本。何况如果重写,当时自己来就好了。 如果不重写,确实看着有点别扭。 以前...
同样,我们用(list e1 ... en)代表(cons e1 ... (cons en '()) ... ) 现在,我们定义一些新的函数。我在函数名的末尾加了句号,以便于...
既然我们有了一种描述函数的方法,我们在7个基础操作符的基础上定义一些新函数。首先,我们会定义一些通用函数的简要记法。我们用cxr代表car和cdr的组合。其中的x是一系列的a...
偶然的,我们看到了怎样定义cond表达式的缺省子句。一个子句,如果第一个元素是't,那么求值时总是为true,因此,(cond (x y) ('t z)),就等同于其他语言中...
假设我们想要定义一个函数(sub x y z),它代表的含义是:以一个表达式x,一个原子y,一个列表z为参数。并返回一个类似z的列表,其中所有出现元素y的地方都用表达式x代替...
有另外一个记号使得函数可以提及它本身,因此提供了一个方便定义递归函数的方式。这个记号的形式如下: (它)表示一个像(lambda (p1 ... pn) e)这样的函数,同时...
用Java 8的Steam有一段时间了,虽然理解的还不深,但是在写Spark任务的时候,看到各种RDD算子就莫名的熟悉,用的还算自觉比较称手。今天偶然在另一个系统看到Java...
如果一个表达式的形式如下:第一个元素是一个原子f并且它不是原始操作符。 译者注,这里的表达式指的是函数定义(lambda (p1 ... pn) e)中的e。 如果f的值也是...
2. 函数的表示 接下来,我们定义一套表示函数的符号。函数形如(lambda (p1 ... pn) e),其中p1 ... pn是原子类型,称为参数(parameter,形...
ClusterManager负责资源管理,比如YARN。 Driver负责向资源管理器申请资源,资源也就是Worker节点。 之前一直以为Driver等同于Master,其实...
一个Application对应至少1个Job。一个Job对应至少1个Stage。一个Stage对应至少1个Task。 其中: Task的数量与RDD的分区数量相当。分区数量取...
和MR的对比 Spark相对于MapReduce在2类场景下会显著增强: 交互式的场景 内存迭代计算型的场景。 原因比较简单:比如在1TB日志中,查找Error日志,找到Er...
(cond (p1 e1) ... (pn en)),按以下方式运行:表达式p1到pn依次求值(evaluate),直到某一个表达式返回t。当某个表达式为真,对应的表达式e就...
(car x),期望入参x是一个列表,返回值是它的第一个元素。 (cdr x),期望入参x是一个列表,返回值是它的第一个元素之后的所有元素。 (cons x y),期望入参y...
引用可能看起来有一点奇怪,因为其他语言中很少有类似的概念。这和Lisp最具有标示性的特点紧密相关:数据和代码是通过同样的数据结构(列表)组成的,引用操作符(quota)用于区...
(quota x)返回x。为了可读性,我们把(quota x)记为'x(quota意味着引用)。 (atom x),当x是一个原子或者空列表时,返回原子t,否则返回()。在L...
在数学中,表达式1+1的值为2。合法的Lisp表达式也有值。如果一个表达式e产生了一个值v,我们说e返回了v。我们的下一步是定义表达式,以及这些表达式的返回值。 如果一个表达...
1. 7七个原始操作符 我们从表达式的定义开始。表达式可以是原子,原子(形式上)是字母组成的序列(比如:foo)。表达式也可以是列表,列表(形式上)由圆括号包裹,以空格为分隔...
在这篇文章中,我尝试用最通俗易懂的术语解释麦卡锡的发现。(目的)不仅仅是学习他在四十年前所发现的有趣的理论成果,更重要的是展现(编程)语言的发展方向。Lisp不同寻常的地方是...