介绍一个很有意思的脚本语言:GolfScript

it2022-05-05  92

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

相关资源:各显卡算力对照表!

最新回复(0)