智能车制作
标题: 有趣的非主流编程语言,轻松一刻 [打印本页]
作者: agogos 时间: 2013-1-10 19:57
标题: 有趣的非主流编程语言,轻松一刻
[转]
总有人喜欢标新立异,人类社会如此,计算机世界也一样。本来今天在研究vim,顺便编译几个程序,中途发现问题,遂google之,结果看到了好玩的code,仔细深究发现了不少乐趣,都是关于编程语言的。先来看看一个比较另类的语言BrainFuck。 关于程序语言的名字,请不要忘文生义,有人以为这是一个搞笑的语言,不,这是一种严肃的语言,请诸位虔诚地看待它。
Brainfuck,是一种极小化的计算机语言,按照wiki,它由Urban Müller在1993年创建,也被简称为BF。这种语言,是按照“Turing complete(完整图灵机)”思想设计的,它的主要设计思路是用最小的概念实现一种“简单”的语言,BrainF**k 语言只有八种符号,所有的操作都由这八种符号的组合来完成。
BF基于一个简单的机器模型,除了八个指令,这个机器还包括:一个以字节为单位、被初始化为零的数组、一个指向该数组的指针(初始时指向数组的第一个字节)、以及用于输入输出的两个字节流。
下面是这八种指令的描述,其中每个指令由一个字符标识:
字符 | 含义 |
> | 指针加一 |
< | 指针减一 |
+ | 指针指向的字节的值加一 |
- | 指针指向的字节的值减一 |
. | 输出指针指向的单元内容(ASCII码) |
, | 输入内容到指针指向的单元(ASCII码) |
[ | 如果指针指向的单元值为零,向后跳转到对应的]指令的次一指令处 |
] | 如果指针指向的单元值不为零,向前跳转到对应的[指令的次一指令处 |
BrainFuck 只有八种指令,没有关键字,也不允许自定义标识符,因此它的编译器实现起来非常简单,初学 C 语言不久的人都可以自己编出来,尽管在座的电院同仁都可以自己编一个,不过为了引起大家的兴趣,我这里还是给出大家一个官方发布的版本。这个程序只有短短 50 多行,并且完全由 ANSI C 写成,因此你随便找个 C 语言编译器,把它编译一下。
#include <stdio.h>;
int p, r, q;
char a[5000], f[5000], b, o, *s=f;
void interpret(char *c)
{
char *d;
r++;
while( *c ) {
//if(strchr("<>;+-,.[]\n",*c))printf("%c",*c);
switch(o=1,*c++) {
case '<': p--; break;
case '>;': p++; break;
case '+': a[p]++; break;
case '-': a[p]--; break;
case '.': putchar(a[p]); fflush(stdout); break;
case ',': a[p]=getchar();fflush(stdout); break;
case '[':
for( b=1,d=c; b && *c; c++ )
b+=*c=='[', b-=*c==']';
if(!b) {
c[-1]=0;
while( a[p] )
interpret(d);
c[-1]=']';
break;
}
case ']':
puts("UNBALANCED BRACKETS"), exit(0);
case '#':
if(q>;2)
printf("%2d %2d %2d %2d %2d %2d %2d %2d %2d %2d\n%*s\n",
*a,a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9],3*p+2,"^");
break;
default: o=0;
}
if( p<0 || p>;100)
puts("RANGE ERROR"), exit(0);
}
r--;
// chkabort();
}
main(int argc,char *argv[])
{
FILE *z;
q=argc;
if(z=fopen(argv[1],"r")) {
while( (b=getc(z))>;0 )
*s++=b;
*s=0;
interpret(f);
}
}
看下面这段hello world的程序:
++++++++++[>+++++++>++++++++++>+++>+<<<<-]
>++.>+.+++++++..+++.>++.<<+++++++++++++++.
>.+++.------.--------.>+.>.
第一遍读不懂是吗?读不懂是正常的= =到这里去找对应C语言的解释吧:
如果你要觉得BF已经很另类了,那么下面这些程序语言更令人匪夷所思。
WhiteSpace语言
这是一种只用空白字符(空格,TAB和回车)编程的语言,而其它可见字符统统为注释。下面是它的一个示例:
什么?你什么也没有看见,这就对了,因为这正是这门语言的独特之处。访问下面这个链接查看Hello,World示例。(PS:不要寄希望与在人人日志页面上通过ctrl+A来查看空白字符。。因为我根本没有输入什么,^ ^)
中文编程语言
这才是重点!我们的汉语国粹!
中文basic
中文指令 | | 对应于的Applesoft BASIC |
10 卜=0 | | 10 Y=0 |
20 入 水, 火 | | 20 INPUT E, F |
30 從 日 = 水 到 火 | | 30 FOR A = E TO F |
40 卜 = 卜+對數(日) | | 40 Y = Y + LOG (A) |
50 下一 日 | | 50 NEXT A |
60 印 卜 | | 60 PRINT Y |
很牛啊有木有= =!
#!/usr/local/bin/cpython
回答 = 读入('你认为中文程式语言有存在价值吗 ? (有/没有)')
如 回答 == '有':
写 '好吧, 让我们一起努力!'
不然 回答 == '没有':
写 '好吧,中文并没有作为程式语言的价值.'
否则:
写 '请认真考虑后再回答.'
上面这段程序很厉害有木有!
就写到这吧。。。这个系统下面中文输入法略鸡肋。。。
再次声明,这是一篇很严肃的文章。恩,就是这样。
作者: yukunlinykl 时间: 2013-1-10 20:03
编码问题是硬伤啊。。。
作者: 甜糖小海 时间: 2013-1-10 20:14
作者: glacier0 时间: 2013-1-10 20:21
囧。可读性差
作者: subingkiun 时间: 2013-1-10 20:26
长见识了..
作者: 124694679 时间: 2013-1-10 20:32
大千世界,无奇不有!
作者: 海博 时间: 2013-1-10 20:37
作者: ludlee 时间: 2013-1-10 20:49
作者: Peaker 时间: 2013-1-10 20:49
作者: exiao 时间: 2013-1-10 20:58
好像有个叫混乱编程大赛,有类似的东西
作者: 简单丹 时间: 2013-1-10 20:59
作者: sdlibin007@qq.c 时间: 2013-1-10 21:26
又长见识了
作者: liuyuliuyu1216 时间: 2013-1-10 21:42
了解一下
作者: 缘来如此 时间: 2013-1-10 21:44
再一次感到了自己的渺小,补充知识去了...
作者: 青龙00 时间: 2013-1-10 21:53
还好吧
作者: 1006110218 时间: 2013-1-11 09:08
牛!
作者: 萧逸 时间: 2013-1-11 09:38
!
作者: 飞天小猪 时间: 2013-1-11 12:55
WhiteSpace亮了
作者: silence2455 时间: 2013-1-11 14:03
有意思啊
作者: wangpeng1 时间: 2013-1-11 16:34
作者: newfish 时间: 2013-1-11 17:02
不懂、。、
作者: zangfan 时间: 2013-1-11 21:32
f**k牛逼
作者: 似水流年、 时间: 2013-1-12 09:21
C语言:用++a++写个程序,并说明其优点
欢迎光临 智能车制作 (http://111.231.132.190/) |
Powered by Discuz! X3.2 |