posts - 81,  comments - 84,  trackbacks - 0
  2018年10月29日
摘要:写博客也有一年多了,随着时间的推移,短短的一年多,我写博客的目的、方法也在不断的变化中。 本来,写博客这个动作本应该提前至少十年,可是却一拖再拖,也一直没有去写。一年半之前,因为一些变化,突然觉得自己确实应该写一点,目的也很简单,就是单纯的觉得别人都在写,我还是写点什么吧,似乎这样才像一个搞信息技术 阅读全文
posted @ 2018-10-29 00:35 窗户 阅读(812) 评论(2) 推荐(3) 编辑
  2020年7月31日
摘要:人工智能(AI)是目前IT最前沿的领域之一,而深度学习(Deep Learning)则是AI中最火热的方向。深度学习是指深度的神经网络,这主要是因为网络深了之后才可以表现更广阔的意思,而神经网络最基本的问题是分类问题。本文从神经网络开始起,讲讲深度学习分类网络的发展历史以及其中用到的技术。 阅读全文
posted @ 2020-07-31 16:20 窗户 阅读(235) 评论(1) 推荐(1) 编辑
  2020年5月31日
摘要:理论上,函数是一等公民(first class function)的语言都可以使用函数式编程,从而利用算子(高阶函数)来做装饰器。装饰器一般是这样一个算子,它接受一个函数作为参数,返回另外一个函数。装饰器,顾名思义,就是把一个函数“装饰”一下,得到另外一个函数。为何要装饰一下呢?目的一般是可能设计上需要对函数做一些改装,比如原函数输出结果需要再加工加工,或者原函数的输入参数传入不一样,或者两者兼有之,等等。 阅读全文
posted @ 2020-05-31 13:50 窗户 阅读(152) 评论(0) 推荐(0) 编辑
  2020年4月20日
摘要:有的时候,我们写Python程序需要处理复杂对象,过程中调试可能需要去看看产生的对象如何,我们可以把它打印成json来看,这是个不错的办法。 阅读全文
posted @ 2020-04-20 23:18 窗户 阅读(338) 评论(0) 推荐(0) 编辑
  2020年4月14日
摘要:所谓众数,源于这样的一个题目:一个长度为len的数组,其中有个数出现的次数大于len/2,如何找出这个数。 阅读全文
posted @ 2020-04-14 21:55 窗户 阅读(197) 评论(1) 推荐(1) 编辑
  2020年2月29日
摘要:上一章介绍了数字电路的重要概念原语,可以用来做门级的元件。这一章里,我们在原语的基础上再引入模块的概念。 阅读全文
posted @ 2020-02-29 18:57 窗户 阅读(122) 评论(0) 推荐(0) 编辑
  2020年1月20日
摘要:上一章给出了组合电路的仿真实现,这一章开始思考时序电路的仿真实现。但时序电路远比组合电路复杂的多,我们先从组成电路的每个元件说起。在程序实现层次,我们可以考虑给每个基础元件一个自定义描述方式,称为原语。 阅读全文
posted @ 2020-01-20 11:21 窗户 阅读(229) 评论(0) 推荐(1) 编辑
  2019年12月9日
摘要:EDA是个很大的话题,本系列只针对其中一小部分,数字电路的仿真,叙述一点概念性的东西,并不会过于深入,这方面的内容实则是无底洞。本系列并不是真的要做EDA,按照SICP里的相关内容,采用Lisp的方言Scheme。再者,Lisp并不是只有函数式一种编程范式,真正做EDA,仿真的核心部分为了运行效率可 阅读全文
posted @ 2019-12-09 13:07 窗户 阅读(386) 评论(0) 推荐(0) 编辑
  2019年11月3日
摘要:尾递归 这篇文章,我们讲尾递归。在递归中,如果该函数的递归形式表现在函数返回的时候,则称之为尾递归。 举个简单的例子,用伪码如下: function Add(a, b) if a = 0 return b return Add(a-1, b+1) end 上面这个函数实际上是两个数的加法,简单起见, 阅读全文
posted @ 2019-11-03 19:37 窗户 阅读(621) 评论(0) 推荐(0) 编辑
  2019年10月27日
摘要:诡异的代码 看看这段代码,很明显,是列举出100以内所有的质数。类似这样的程序我们从学程序开始写过很多。 再仔细看看,这种“语言”似乎有点像我们学过的其他语言,但似乎并没见过,语法有那么一点点古怪?! 哦!看到了,原来是一段Python! 上面代码的执行结果是 2,3,5,7,11,13,17,19 阅读全文
posted @ 2019-10-27 18:27 窗户 阅读(2769) 评论(11) 推荐(6) 编辑
  2019年9月16日
摘要:无意中看到很多年前写的ppt,当时只保留了每一页的整体图片,但是其中某些图存在明显错误,不是当时的最终版本,可能当时最终的版本比这个要多十几页ppt。只可惜都是图片,ppt早已不在。记得当时还是用了大篇幅来讲计算机语言的历史,讲了两个小时吧,目的也是为了能让大家对于计算机语言产生一定的兴趣,从而了解 阅读全文
posted @ 2019-09-16 21:16 窗户 阅读(139) 评论(0) 推荐(0) 编辑
  2019年8月14日
摘要:对于函数式编程来说,map/reduce/filter这几个算子非常重要,其中有的语言不是reduce而是fold,但功能基本一样,不过reduce的迭代一般只有一个方向,fold可能会分两个方向,这是题外话。 这篇文章就是来理解map的语义和实现,使用Scheme、Python、JS三种语言来解释一 阅读全文
posted @ 2019-08-14 17:34 窗户 阅读(456) 评论(0) 推荐(1) 编辑
  2019年7月28日
摘要:每当学习一门计算机语言,我们也要做一些练习以便逐步熟悉。随着我们对这种编程语言本身支持的抽象手段理解的过程,以下这些问题,基本可以在几乎每门编程语言学习的过程中完成,这些语言可以包含但不限于C、C++、Shell、awk、Python、JavaScript、Java、Scala、Ruby、Lisp( 阅读全文
posted @ 2019-07-28 22:02 窗户 阅读(501) 评论(0) 推荐(0) 编辑
  2019年6月2日
摘要:我们根据上一章最开始的相互递归转一般递归的方法,结合Y Combinator,来对第一章的append实现做一下测试。 上述实现中,append和_append互相递归。 按照第二章中相互递归转普通递归的方法,我们可以定义一个高阶函数append-high, 使得(append-high 1)就是a 阅读全文
posted @ 2019-06-02 21:42 窗户 阅读(142) 评论(0) 推荐(0) 编辑
  2019年5月24日
摘要:本章继续上一章,说明一下这个问题: 所有的相互递归都可以被转化为一般的递归,从而最终可以用lambda演算来完成。 假设有以下对于$f_1, f_2, ... f_n$的相互递归: $f_{1} = F_{1}(f_{1}, f_{2}, ... f_{n})$ $f_{2} = F_{2}(f_{ 阅读全文
posted @ 2019-05-24 23:59 窗户 阅读(356) 评论(0) 推荐(0) 编辑
  2019年4月28日
摘要:相互递归就是多个函数互相定义,最常见的就是两个函数,比如f和g,f的定义中用到g,而g的定义中用到f。 相互递归一样有无限递归的可能,最简单的: f:x->g(x) g:x->f(x) 给个最简单的没有无限递归的例子,判断一个正整数是不是偶数或者是不是奇数,用C++来描述如下: 以上效率虽然不高(甚 阅读全文
posted @ 2019-04-28 23:06 窗户 阅读(290) 评论(0) 推荐(1) 编辑