摘要: 这个解释器可以用来跑前面两篇文章的例子,所以一并扔出来,三部曲哈哈。Lisp内置的S-expression相当于解析好的语法树,而借助quasiquote和unquote又很容易进行语法树层面的变换,所以Lisp的自举和扩展都很容易。相对而言,其他语言有入门教材就讲怎么实现语言自身的解释器的吗?至少... 阅读全文
posted @ 2014-05-31 09:47 Scan. 阅读(1241) 评论(0) 推荐(0) 编辑
摘要: 这题目确实比较杀脑细胞...原题:1 (let* ((yin2 ((lambda (cc) (display "@") cc) (call-with-current-continuation (lambda (c) c))))3 (yang4 ((l... 阅读全文
posted @ 2014-05-23 03:10 Scan. 阅读(1359) 评论(0) 推荐(0) 编辑
摘要: 嗯,来写写经过:在知乎上看见用Belleve牛用javascript写了一个精简的lisp解释器 =>我也想写一个,用lua写,能多简单呢? =>写了一个阉割的scheme解释器,包含lambda/if两个special form,以及+-=print几个过程,60行代码 =>能再... 阅读全文
posted @ 2014-05-21 03:27 Scan. 阅读(4430) 评论(0) 推荐(0) 编辑
摘要: 对于参数较多的函数,如UI库函数,你很难去记忆每个位置的参数类型和意义,尤其在你的IDE比较简陋的开发环境下,尤为痛苦,可能你需要频繁的查询文档。像Python这样语言,原生支持命名参数,如def func(name, age): print name, agefunc('aaa', 1)func(age = 2, name = 'bbb')可能你的函数有10个参数,其中大部分都可以有默认值,因此,如果你需要指定其中第3、第5个参数的值,而其他参数使用默认行为的时候,"func(arg3 = 3, arg5 = 5)"这样的调用很方便。要在C 阅读全文
posted @ 2012-10-26 21:36 Scan. 阅读(1540) 评论(0) 推荐(0) 编辑
摘要: 刘未鹏牛最近的一篇文章“C++11和快速迭代开发”中,提到一个小工具Ensure,很有用,但他不方便提供具体代码,这里我给出一个简易实现。Ensure用法如:ENSURE(0 <= index && index < v.size())(index)(v.size());断言失败时,会打印:Failed: 0 <= index && index < v.size()File: xxx.cpp Line: 123Context Variables: index = 12345 v.size() = 100概括来说,Ensure至少包括以下特性 阅读全文
posted @ 2012-10-26 11:24 Scan. 阅读(3508) 评论(2) 推荐(1) 编辑
摘要: 几个月的构想+0.5小时的设计+4小时的linq.h编码+3小时的测试编码。大量使用C++11的特性,在GCC 4.7.2下编译通过。关于实现相关的描述就不说了,我表达能力差,恐怕讲清楚还需要好几个小时。具体使用参见测试码。上代码:(1) linq.hView Code #ifndef LINQ_H#define LINQ_H#include <cassert>#include <utility>#include <functional>#include <memory>#include <algorithm>#include < 阅读全文
posted @ 2012-10-20 23:28 Scan. 阅读(4722) 评论(17) 推荐(1) 编辑
摘要: 这一个月码了2万多的c++代码,脑袋都比较晕了...光线追踪到此结束吧。并没有什么特殊的计划,基本就是对照着陈子涵老大空间里的效果,实现了些容易理解的东西。因为很业余,实现的过程就是尝试和拼凑的过程,就不解释了,直接上图。这是36096个三角形的Menger Sponge,只有漫反射(含镜面光),原始分辨率2000*1500,我的i5四核全开耗时1.512秒:加上阴影,耗时2.235秒:加入环境遮挡,每个屏幕像素发出100条射线查找遮挡关系,耗时99秒:最后一张,三角形不多(只有茶壶是三角网格),但是效果比上面的复杂,包括反射、折射、阴影、环境遮挡、天空盒、凹凸贴图,还是2000*1500的分 阅读全文
posted @ 2012-04-29 22:17 Scan. 阅读(1437) 评论(0) 推荐(1) 编辑
摘要: 目前渲染部分基本告一段落,实现了双线性、三线性、mipmap纹理采样、重复/镜像uv寻址模式、镜面光和纹理的叠加、gouraud着色、phong着色、z缓存、1/z缓存、透视纹理/光照修正、平面裁剪(含三角形分割)、正交投影摄像机。以后如果再增加功能,大概就是顶点动画之类,重心应该在引擎层了,渲染层基本完毕。上图。第1张:从坐到右,从上到下。无纹理、无镜面光、无深度缓冲,依次是:1. 线框。2. 纯色。 即每个三角形一个颜色。3. flat着色(相比上次,修正后的效果好多了)。也是每个三角形一个颜色,但是这个颜色是参照了光照情况的。4. gouraud着色。根据光照计算每个三角形的顶点颜色,三 阅读全文
posted @ 2012-04-29 22:13 Scan. 阅读(3164) 评论(5) 推荐(3) 编辑
摘要: 这个问题困扰我许久,终于解决了。首先,在python解释器中直接import wx,是没有问题的,能够正常使用wxPython,说明安装wxPython成功了的。但是,打开gvim,编辑一个.py文件,在脚本中import wx,声明一个变量app = wx.App(),再键入app.,结果没有弹出自动补全菜单。要知道,面向对象gui库十分庞大,不太可能去记类的方法,因此,自动补全所提供的列表,非常重要。gvim对python的自动补全支持在文件pythoncomplete.vim中实现,浏览一下知道,补全功能依赖于动态语言的反射(eval、dir),如果该功能有问题的话,调用python函数 阅读全文
posted @ 2012-02-26 17:54 Scan. 阅读(1411) 评论(0) 推荐(1) 编辑
摘要: 我这里实现全排列的基本算法如下(C++): 1 #include <algorithm> 2 #include <iostream> 3 #include <vector> 4 5 void perm(std::vector<int>& v, int pos = 0) 6 { 7 if (pos == v.size()) { 8 for (int i = 0; i < v.size(); ++i) { 9 std::cout << v[i] << ',';10 }11 std::cout &l 阅读全文
posted @ 2012-01-17 22:57 Scan. 阅读(3788) 评论(6) 推荐(2) 编辑