随笔分类 - 软件
Python装饰器的一点解读
摘要:理论上,函数是一等公民(first class function)的语言都可以使用函数式编程,从而利用算子(高阶函数)来做装饰器。装饰器一般是这样一个算子,它接受一个函数作为参数,返回另外一个函数。装饰器,顾名思义,就是把一个函数“装饰”一下,得到另外一个函数。为何要装饰一下呢?目的一般是可能设计上需要对函数做一些改装,比如原函数输出结果需要再加工加工,或者原函数的输入参数传入不一样,或者两者兼有之,等等。
阅读全文
Python下将一般对象打印成Json
摘要:有的时候,我们写Python程序需要处理复杂对象,过程中调试可能需要去看看产生的对象如何,我们可以把它打印成json来看,这是个不错的办法。
阅读全文
各种编程语言对尾递归的支持
摘要:尾递归 这篇文章,我们讲尾递归。在递归中,如果该函数的递归形式表现在函数返回的时候,则称之为尾递归。 举个简单的例子,用伪码如下: function Add(a, b) if a = 0 return b return Add(a-1, b+1) end 上面这个函数实际上是两个数的加法,简单起见,
阅读全文
编程语言的发展
摘要:无意中看到很多年前写的ppt,当时只保留了每一页的整体图片,但是其中某些图存在明显错误,不是当时的最终版本,可能当时最终的版本比这个要多十几页ppt。只可惜都是图片,ppt早已不在。记得当时还是用了大篇幅来讲计算机语言的历史,讲了两个小时吧,目的也是为了能让大家对于计算机语言产生一定的兴趣,从而了解
阅读全文
map的实现和柯里化(Currying)
摘要:
对于函数式编程来说,map/reduce/filter这几个算子非常重要,其中有的语言不是reduce而是fold,但功能基本一样,不过reduce的迭代一般只有一个方向,fold可能会分两个方向,这是题外话。 这篇文章就是来理解map的语义和实现,使用Scheme、Python、JS三种语言来解释一
阅读全文

入门任意一种编程语言所必须的几道习题
摘要:每当学习一门计算机语言,我们也要做一些练习以便逐步熟悉。随着我们对这种编程语言本身支持的抽象手段理解的过程,以下这些问题,基本可以在几乎每门编程语言学习的过程中完成,这些语言可以包含但不限于C、C++、Shell、awk、Python、JavaScript、Java、Scala、Ruby、Lisp(
阅读全文
tensorflow的基本认识
摘要:tensorflow是一个很流行的计算框架,目前主要用来做深度学习。但实际上,tensorflow不仅仅可以做深度学习,理论上说任何算法都可以用tensorflow来描述,就在于它做了计算流图这样的抽象,而tensorflow这个名字实际上很自然流。其实提到计算流图,这样的抽象并不是tensorfl
阅读全文
炒菜模型——各种编程范式
摘要:我这里以炒菜为例来给出各种编程范式的示例。 过程式编程 生活的经验告诉我们以下的物理现实,事情是按照时间的顺序一个步骤接一个步骤的发展。编程里有一个范式就模拟了这样的经验,就是过程式编程。 如果现在有一些刚从超市买回来的菜,要吃进肚子,按照过程式编程,可以如下表示: 洗(菜) 切(菜) 炒(菜) 吃
阅读全文
scheme实现最基本的自然数下的运算
摘要:教一个基本没编过什么程序的朋友scheme,为什么教scheme呢?因为他想学,因为一直听我鼓吹,而他觉得他自己多少有C语言一点基础,而又因为我觉得函数式才像数学,而过程式是偏向物理现实的,感觉不够抽象。当然,对于一个成年人来说,有着太多的生活、学习、工作经验,这些很多因为是物理现实,很有过程式的意
阅读全文
awk的递归
摘要:想来惭愧,之前写的一篇文章《用awk写递归》里多少是传递了错误的信息。虽然那篇文章目的上是为了给出一种思路,但实际上awk是可以支持函数局部变量的。 awk对于局部变量的支持比起大多数过程式语言来说很是怪异,它只在函数的参数里支持。所以如果想用局部变量,多少需要改变我们以前的一些习惯。 于是我们使用
阅读全文
scratch写的图灵机
摘要:从程序员的角度来说,大多数程序员对于scratch不感冒,因为这专门给孩子玩的。的确,积木的方式不适合专业程序员写代码,程序员也更喜欢敲键盘,但其实plc的梯形图却也算是此类(电路的原理图思维上有很大差别,属于真实电路拓扑,不能算此类)。然而别小看scratch,怎么说,它也是图灵完备的。而且,过程
阅读全文
我博客上的围棋js程序
摘要:作为一个围棋爱好者,就决定在博客里加个围棋js程序。于是,申请了博客的js权限,美化美化我的博客。 好在js的语法像C系的,看了看,写个程序应该还是可以的。 围棋里,设计好基本的数据结构: 画图用canvas,之前并未接触,一样,baidu上搜搜,知道了画圆、画线、画方块的办法,OK了,我画围棋说白
阅读全文
python使用rsa库做公钥解密(网上别处找不到)
摘要:使用RSA公钥解密,用openssl命令就是openssl rsautl -verify -in cipher_text -inkey public.pem -pubin -out clear_text,但其python网上还真没有找到有博文去写,只有hash的rsa解签名。 这里使用rsa库,如果
阅读全文
C语言/原子/编译,你真的明白了吗?
摘要:说到原子,类似于以下的代码可能人人都可以看出猫腻。 我想大多数人都知道其结果未必会得到1000000000。 测试一下吧。 可是真的知道猫腻了吗?如果我编译的时候优化一下呢? 运行速度一下子变的飞快,而且似乎都得到了10亿。 这里,mythread里cnt自加5亿次被优化成了 cnt += 5000
阅读全文
用sed实现wc -w的功能
摘要:sed是所谓的流编辑器,我们经常用它来做一些文本替换的事情,这是sed最擅长的事情,如sed 's/Bob/Tom/g'就是把文章中所有的Bob改成Tom。 sed是图灵完备的,作为sed的粉丝,喜欢用sed做各种sed不擅长的事情,这里实现一下wc -w的功能,也就是统计文章单词数量。 我习惯喜欢
阅读全文
使用python操作mysql
摘要:python可以使用MYSQLdb来操作数据库。 我们先来建数据库,其SQL语句如下: python操作数据库代码如下: 以上代码对于有无结果集,有多个结果集(存储过程)的SQL语句都是可以使用的。如果没有结果集,当然不需要cursor,自然也查不出结果集。 cursor.nextset()用于遍历
阅读全文
python和C语言混编的几种方式
摘要:Python这些年风头一直很盛,占据了很多领域的位置,Web、大数据、人工智能、运维均有它的身影,甚至图形界面做的也很顺,乃至full-stack这个词语刚出来的时候,似乎就是为了描述它。 Python虽有GIL的问题导致多线程无法充分利用多核,但后来的multiprocess可以从多进程的角度来利
阅读全文
python访问http的GET/POST
摘要:使用urllib和urllib2,可以轻松实现对http的访问。 以下给个例子,实现对http://127.0.0.1/cgi/test的GET与POST 使用的是平常意义上的query string POST接受json 其中, urllib2的Request方法如果只带一个参数是GET方法,但如
阅读全文
用openssl库RSA加密解密
摘要:以上是一个示例,测试了私钥加密(签名)/公钥解密(验证),main函数是一个测试 测试一下,先生成2048位公钥、私钥对 编译、文件测试 对比一下 公钥加密、私钥解密就不写了,对着看就会很明白了。 int RSA_public_encrypt(int flen, const unsigned cha
阅读全文
sed的粉丝
摘要:UNIX/LINUX下有个工具叫sed,起源于ed命令,但没有人机交互,完全是脚本语言。sed虽然是结构化的程序,但其虚拟出来的机器与我们实际机器相差甚远,依靠模式空间和保留空间的交替使用、正则表达式不断替换达到处理的目的。 sed有相当一部分粉丝,就如同lisp那样,因为与众不同,而用sed写出s
阅读全文