33/44, 介绍DSL和Kubla

今天我写了一个用SPFA求最短路的小程序,Penhu同学想让我给他一个伪代码,于是我写了一个”SPFA.wdm”。为了有意思起见,我煞有其事地创造了一种完整的程序设计语言。因为wdm没有实际意义,因此改名DSL(Damn Simple Language)。写完后,Gedit自作聪明地用VHDL的语法给程序染了色,还真像那么回事。实际上,后来发现VHDL和DSL的相似度并不高,只是凑巧罢了。

Penhu同学在看到DSL后,灵感一现写出了Kubla语言的SPFA。一点很贱的是,Kubla内置的算法库里内置SPFA方法。不过,还是挺王道的,到头下来程序只有6行。分号后面是单行注释,叹号中间是多行注释。

!	SPFA, in kubla language.
	Kubia, next generation language designed by Penhu201.
	SPFA, a alg to solve SSSP problem. !
(alg) ;包含一个库:alg(常见的算法)
|\n/| ;输入n
|\|\graph/|/| ;两个输入符号,代表输入二维数组graph
 
d[n] <- alg`SPFA . graph . 1 . i, 2 -- n
;调用alg库的SPFA方法,传三个参数,句号作为间隔。返回值赋给d数组。
i, 1 -- n : 1 ;循环,从1到n,循环变量为i,间隔1
	|/"To $i: $d[i]"\| ;输出
-- SPFA, in DSL(Damn simple language).
-- DSL, a missing programming language designed by Xhacker Liu.
-- SPFA, a alg to solve SSSP problem.
 
inc io, ds
 
io.fopen("Graph.in") -> fin
io.input(fin, "%d") -> nodes
ds.graph.matrix.input(fin) -> graph
d[1, 2 to 10] <- 0, INFINITY
 
ds.queue.init() -> queue
ds.queue.in(queue, 1)
while ~ds.queue.empty(queue)
	n <- ds.queue.out(queue)
	loop i; 1 to nodes; 1
		if d[n] + graph[n][i] < d[i]
			d[n] + graph[n][i] -> d[i]
			ds.queue.in(queue, i)
 
loop i; 2 to nodes; 1
	io.output(stdout, "To $i: $d[i]")

备注:以上染色仅供参考。Kubla是用C的语法染的色,DSL使用VHDL。

Leave a Reply