实现尾递归的右折叠

题目概述

折叠,也称为归约(reduce)、积累(accumulate)、聚集(aggregate)、压缩(compress)或注入(inject),指称一组高阶函数,它们分析递归数据结构并通过使用给定组合运算,将递归的处理它的构成部件、建造一个返回值的结果重组起来。典型的,要向折叠提供一个组合函数,一个数据结构的顶端节点,和可能的在特定条件下使用的某些缺省值。折叠接着以系统性方式使用这个函数,进行组合这个数据结构的层级中的元素 – By wiki

下面的Scala代码定义了右折叠。因为不是尾递归的函数,无法应用对应优化,在as很大的时候会造成Stack-Overflow。我们需要探索stack-safe的实现。

1
2
3
4
5
def foldRight[A, B](as: List[A], z:B)(f: (A, B) => B): B =
as match {
case Nil => z
case Cons(x, xs) => f(x, foldRight(xs, z)(f))
}

Read More

工作开发环境搭建与文档管理

几年时间撰文诸多,描述了各种不同语言的环境配置指导,但是对于Mac OS平台没有统一描述过较为整体的配置。一来是因为迄今为止的三段正式工作经历当中前两次都是要强制使用Windows平台做开发,并且只有PC机可以选择;二来是因为我自己的非正式工作经历(比如开发Lambda、背单词APP等),只用到了EmacsXCode单一的工具和环境。当下的工作中终于可以选择MBP了,也因此有契机总结一下全局视角的开发环境。(关于其它mac软件环境配置,参考开源创意软件常用软件

Read More

谈谈情怀

情怀有情怀特有的价值,我不管情怀起不起作用,这里所表达的情怀是指特定环境、时代、个人见识等多种因素和背景的影响下呈现出的一些对未来期望以及自我意义探寻的表现。并非指真理,情怀没有对错。

Read More

上海刚需买房记

今年运气不错,办完了一件大事,心愿单上一个大物件实现了~

我大概最早从17年底到18年初开始计划购买上海的房子,最一开始很天真的觉得可以300-400w全款购买位于唐镇的商品房,虽然距离上远了一点点,但是基本上没有贷款压力。结果后来发现300-400w是2014年的价格XD,18年早就翻了一倍,现在20年下半年又水涨船高。

那个时候缺乏基本的经济常识,也没有足够信任的信息来源,甚至根本不理解在中国一线城市购买不动产的含义。时至今日,虽然依然欠缺很多知识,但对于刚需房来说已经足够了。

Read More

复杂系统真相——软件篇

最近国内很不巧,赶上了新型冠状病毒SARS-Cov-2大爆发,也算是得益于此我获得了自打从英国回国入职后久违的真正意义上的小长假。当然,按照国内科技私企的特点免不了之后会做出让我问候他家祖先的弥补性措施来。不多扯题外话,主要就复杂的系统谈一谈我的个人浅见。

亘古至今,从旧石器时代远古人类的群居生活到新石器时代晚期部落的建立再到现代信息化的社会,人造复杂系统经历了至少成千上万年的演化在生活中已无法离开、无处不在:

  • 大城市本身
  • 交通网络
  • 通讯系统
  • 大飞机、航空母舰等大型单体机械设备
  • 社会公务系统等

除上述的不完整的例子外,还有更神奇的数十亿年演化的自然体系:

  • 地球生态系统
  • 行星系统等

我不是研究自然科学的专家,在此也不谈系统设计(其实系统设计更值得玩味),主要就我相对比较熟悉的复杂软件系统给出一点判断和理解。直到撰文的此刻,再有两个月我工龄将满3年,在2家公司打工,先后经手了5个项目。姑且不论5个商业性质的项目和50个是否会有本质性的区别,一些很容易发现的规律还是大差不差。

Read More

工作3年会遇到什么事

大年初一,起草一篇总结性质的博文,太久没有写类似的文章了,感觉提笔忘语。这篇文章是想记录一下我从2017年工作至今的工作感想的,严格说到4月份才满3年,不过四舍五入也就算了。3年对于一名程序员来讲刚刚摆脱了菜鸟,是步入资深前的中间状态,还是比较资浅的,有代码总量积累的问题(到不是说一定要代码多,基本量要有保证),有遇到的情况是否充足的问题,还有各种与工程本身没太大关系的事情。因为换过一次工作,先后两个工作都有相当涉密的成分,所以技术细节不便多讲。主要是说说我自己的一些流水账吧。

Read More

工作3年会遇到什么技术

工程师与程序录入员的区别就是工程师不仅仅只做编码工作。当然编码是最基础的,除此外还有诸如部署、Support、解决方案提供等「杂活」。曾经我觉得除了编码都是不务正业浪费时间,现在我开始慢慢的去改变这一观点并慢慢去做好很多细节。举个例子,我刚来工作的时候,连Eclipse也用不好,毕竟学生时代用Vim什么的就足够了。

我在刚刚工作时一直希望能够得到一篇弥补象牙塔与真正工业界之间GAP的指导,奈何都不是我特别需要的,所以这里撰文一篇,记录我自己的一些技术所需。因为业务涉密,所以不列举具体业务内容。

Read More