@shellex说: 咦 RT : 很狗血地……我也有感情危机了……

Pages

Topics

随便看看

路边社评论员

  • pete:
    I prefer my iphone 4. My best friend got N900 (Nok... »
  • Keith:
    还能用不. »
  • deepblue:
    测试一下浏览器和系统 »
  • abettor:
    “就和CPU特权级别一样”——这的哥难道是Linus的表弟?! »
  • 董英男:
    为什么总提示确认是相册首页呢 到底哪个才是相册首页啊 »
  • kendisk:
    作为一个轻度Linuxer,刚分手后,感觉木有鸭梨。 »
  • MS IE:
    THIS SITE REALLY SUCK! »
  • Alex:
    gnome-women... »
  • liangsuilong:
    GNOME 自己也有鼓励女性参与项目的计划啊.. »
  • infinte:
    对不起,你的“解ban”版本算得有点问题,可以下(9)pp4 测试。ACID3可有95分啊……另外同... »
  • Alex:
    »
  • Randee Saadat:
    Glad you solved your problem, but what is your que... »

Posts Tagged ‘programming languages’

我们来做大脑操

写下这个题目的时候哈,shellex又一次,情不自禁地,为我们汉语的博大精深而热泪盈眶。多么美妙的翻译啊,大脑操,要是鹰语就不行咯,彻底沦于庸俗:brainfuck。当然了,还有一些女士叫法,比如brainf**k(请看我的文章分类),b*fuck,brainf*ck等等。但是不管你怎么叫它,它都是brainfuck,是为了fuck你的brain而生的。
这个语言绝对是世界上最淫荡的语言之一了。虽然Shellex很早就知道它的淫荡,但是直到今天才介绍给大家,还望见谅咯。
好吧,这么说有点无聊,但是它不是为了fuck你的brain而生的。按照作者的说法,他想写一个最小的图灵完备的计算机语言,那么如果稍微接触一下brainfuck你会发现他也许真的达到目标了。因为brainfuck程序就是像一个图灵机那样运作。
语言说明:
Brainfuck 程序中有一个隐含的指针, 被称为 “the pointer”, 它能在一个长度为30 000字节的数组上来回移动。这个数组总是被初始化为0,而指针则总是被初始化指向数组的头部。
Brainfuck 语言很简单,只有8个指令,都用一个字符来表示

< 指针左移.
> 指针右移.
+ 指针自增.
- 指针自减.
. 输出当前指针指向的字节.
, 接受一个输入并储存在当前当前字节.
[ 如果当前指针不为0,则运行直到遇到]
] 如果当前指针不为0,跳回到匹配的 [

Shellex的brainfuck解释器的实现中,还私自添加了一个扩展指令:

$ 在内存监视器打印程序内存情况.

当然了,Brainfuck的语义可以简洁地用C语言的形式来表达(假设p是一个char *类型的变量)

> becomes ++p;
< becomes --p;
+ becomes ++*p;
- becomes [...]

shellex瞎谈迭代器

以前给别人义务普及C++,我总是说:这个iterator哈,和指向数组元素的指针差不多…. :p
好吧,GOF是这么定义迭代器模式的:提供一种方法访问一个容器(container)对象中各个元素,而又不需暴露该对象的内部细节。
我看起来这个东东,在程序的设计过程中扮演的角色是提供了一个很好的抽象,对容器操作的抽象。所以我们的STL里面的vector啦list啦都用它。iterator是在std这个命名空间下,可见有多NB。
其实也没有那么NB。由于C++这类语言不支持闭包和匿名函数,于是才进化出了用迭代器的这样子的东东。好啦,现在请大家举起手来,跟我一起喊:“一,二,三”,Bingo:
for (vecto::iterator iter = v.begin(); iter != v.end(); ++iter) {
//do sth…
}
来想象一下每次打上面这些东西时你淌着哈喇子嚼着鼻涕嘎子的样子。 因为我可以这样子:
v.each_items(lambda (x){…});
(C++的STL里面倒是提供了foreach函数,但是编写迭代器的复杂性和额外的小函数负担使我不喜欢使用他)
不管如何,iterator的表现已经很好了。作为Lazy Evaluation的实现倒也不会太丑。Lazy Evaluation这种东西其实很常用的,可以让你保持优雅的程序的程序结构的同时保证这些code有效率。
比如说我们经常会发现最容易理解的程序往往不是最高效的(还记得斐波那契函数的树型递归吗)。
再比如说聪明的MM大多不养眼,养眼的MM大多不聪明,养眼又聪明的MM大多插在便便上。就是这样令人恼火。惰性求值就可以帮你解决部分生理问题和部分心理问题。
假设我要找出区间[a, b]中第n个素数,比如a = 10, b = 100, n = 4。好吧,不够严谨,我省略了很多东西,能表达意思就行。这说明在C++里面搞个迭代器真的蛮费劲,所以我就大概…将就一下。

#include
#include
using std::cout;
using std::endl;
typedef int* prime_iterator;

class prime_set {
public:
prime_set(int low, int high) : _low(low), _high(high), _crr_pos(low){ };
prime_iterator begin() {
int i = _low;
for (; i < _high; ++i) {
if (is_prime(i)) {
_crr_pos = [...]

Page 1 of 11