GolfScript是基于栈的语言,用它编写的程序最大的优点在于字符少,相较于其他语言可以使用很少的字符解决一些比较复杂的问题。先来看一个用GolfScript写的数独求解器:
;'2 8 4 3 7 5 1 6 9
0 0 9 2 0 0 0 0 7
0 0 1 0 0 4 0 0 2
0 5 0 0 0 0 8 0 0
0 0 8 0 0 0 9 0 0
0 0 6 0 0 0 0 4 0
9 0 0 1 0 0 5 0 0
8 0 0 0 0 7 6 0 4
4 2 5 6 8 9 7 3 1'
{9/[n]*puts}:p;
~]{:@0?:^~!{@p}*10,@9/^9/=-@^9%>9%-@3/^9%3/>3%3/^27/={+}*-{@^<\+@1^+>+}/1}do
这个程序只用了77个字节!结果如下:
-> 284375169\
639218457\
571964382\
152496873\
348752916\
796831245\
967143528\
813527694\
425689731
乍一看,可能有些人会想到brainfuck。不过GolfScript应该比brainfuck好理解的多,用一个求最大公约数的例子简单介绍下GolfScript的语法:
;'2706 410'
~{.@\%.}do;
-> 82
首先GolfScript是基于栈设计的,所以要理解用它写的程序需要在头脑里放着一个栈空间:)
开头的;符号在这里表示弹出栈顶元素;
''表示字符串;
~将字符串转成数字,所以'2706 410'就变成了2706 410,并被压入栈;
{}do {}表示一个语句块,所以整个这个语句表示只要{}中的语句为真,就一直重复执行下去,每执行一次语句块就弹出一个栈值;
剩下的就是语句块里的字符了:
. 表示复制栈顶元素并将其压入栈;
@ 将从栈顶往下的第三个元素放到栈顶;
\ 交换栈顶的两个元素;
% 栈顶的两个元素取模并将结果放入栈顶。
如果你了解如何求解两个整数的最大公约数,可以就这里介绍的语法在心里进行一下栈操作,看看过程是否和程序执行的一样。
这个语言使用Ruby写的,在官网上只有个golfscript.rb文件下载,下载后用Ruby解释器执行。官网为:http://www.golfscript.com/golfscript/index.html
转载于:https://www.cnblogs.com/language-design/archive/2011/05/27/2060269.html
相关资源:各显卡算力对照表!