摘要:
写博客也有一年多了,随着时间的推移,短短的一年多,我写博客的目的、方法也在不断的变化中。 本来,写博客这个动作本应该提前至少十年,可是却一拖再拖,也一直没有去写。一年半之前,因为一些变化,突然觉得自己确实应该写一点,目的也很简单,就是单纯的觉得别人都在写,我还是写点什么吧,似乎这样才像一个搞信息技术 阅读全文
摘要:
介绍递归论中原始递归函数的概念,并逐步实现了一些原始递归函数,用Scheme模拟并优化。 阅读全文
摘要:
本系列文章是想思考思考递归的编译优化问题,目标在于希望如何从编译、解释层次将树递归进行优化,从而避免过低效率运行。本章来讲讲树递归的问题。 阅读全文
摘要:
人工智能(AI)是目前IT最前沿的领域之一,而深度学习(Deep Learning)则是AI中最火热的方向。深度学习是指深度的神经网络,这主要是因为网络深了之后才可以表现更广阔的意思,而神经网络最基本的问题是分类问题。本文从神经网络开始起,讲讲深度学习分类网络的发展历史以及其中用到的技术。 阅读全文
摘要:
理论上,函数是一等公民(first class function)的语言都可以使用函数式编程,从而利用算子(高阶函数)来做装饰器。装饰器一般是这样一个算子,它接受一个函数作为参数,返回另外一个函数。装饰器,顾名思义,就是把一个函数“装饰”一下,得到另外一个函数。为何要装饰一下呢?目的一般是可能设计上需要对函数做一些改装,比如原函数输出结果需要再加工加工,或者原函数的输入参数传入不一样,或者两者兼有之,等等。 阅读全文
摘要:
所谓众数,源于这样的一个题目:一个长度为len的数组,其中有个数出现的次数大于len/2,如何找出这个数。 阅读全文
摘要:
上一章介绍了数字电路的重要概念原语,可以用来做门级的元件。这一章里,我们在原语的基础上再引入模块的概念。 阅读全文
摘要:
上一章给出了组合电路的仿真实现,这一章开始思考时序电路的仿真实现。但时序电路远比组合电路复杂的多,我们先从组成电路的每个元件说起。在程序实现层次,我们可以考虑给每个基础元件一个自定义描述方式,称为原语。 阅读全文
摘要:
EDA是个很大的话题,本系列只针对其中一小部分,数字电路的仿真,叙述一点概念性的东西,并不会过于深入,这方面的内容实则是无底洞。本系列并不是真的要做EDA,按照SICP里的相关内容,采用Lisp的方言Scheme。再者,Lisp并不是只有函数式一种编程范式,真正做EDA,仿真的核心部分为了运行效率可 阅读全文
摘要:
尾递归 这篇文章,我们讲尾递归。在递归中,如果该函数的递归形式表现在函数返回的时候,则称之为尾递归。 举个简单的例子,用伪码如下: function Add(a, b) if a = 0 return b return Add(a-1, b+1) end 上面这个函数实际上是两个数的加法,简单起见, 阅读全文
摘要:
诡异的代码 看看这段代码,很明显,是列举出100以内所有的质数。类似这样的程序我们从学程序开始写过很多。 再仔细看看,这种“语言”似乎有点像我们学过的其他语言,但似乎并没见过,语法有那么一点点古怪?! 哦!看到了,原来是一段Python! 上面代码的执行结果是 2,3,5,7,11,13,17,19 阅读全文
摘要:
无意中看到很多年前写的ppt,当时只保留了每一页的整体图片,但是其中某些图存在明显错误,不是当时的最终版本,可能当时最终的版本比这个要多十几页ppt。只可惜都是图片,ppt早已不在。记得当时还是用了大篇幅来讲计算机语言的历史,讲了两个小时吧,目的也是为了能让大家对于计算机语言产生一定的兴趣,从而了解 阅读全文
摘要:
对于函数式编程来说,map/reduce/filter这几个算子非常重要,其中有的语言不是reduce而是fold,但功能基本一样,不过reduce的迭代一般只有一个方向,fold可能会分两个方向,这是题外话。 这篇文章就是来理解map的语义和实现,使用Scheme、Python、JS三种语言来解释一 阅读全文
摘要:
每当学习一门计算机语言,我们也要做一些练习以便逐步熟悉。随着我们对这种编程语言本身支持的抽象手段理解的过程,以下这些问题,基本可以在几乎每门编程语言学习的过程中完成,这些语言可以包含但不限于C、C++、Shell、awk、Python、JavaScript、Java、Scala、Ruby、Lisp( 阅读全文
摘要:
我们根据上一章最开始的相互递归转一般递归的方法,结合Y Combinator,来对第一章的append实现做一下测试。 上述实现中,append和_append互相递归。 按照第二章中相互递归转普通递归的方法,我们可以定义一个高阶函数append-high, 使得(append-high 1)就是a 阅读全文