サブルーチン迷路

思考があらぬ方向に行って思いついた謎コード

思考があらぬ方向に行って思いついた謎コード

// subroutine maze

	randomize
	lb  = *LBottom, *lb1, *lb2, *lb3, *lb4
	msg = "bottom", "*1", "*2", "*3", "*4"
	cntPtns = length(lb)
	
	goto *LStepMaze		// Enter Maze
	
*lb1
	mes msg(1) : gosub *LStepMaze : return
*lb2
	mes msg(2) : gosub *LStepMaze : return
*lb3
	mes msg(3) : gosub *LStepMaze : return
*lb4
	mes msg(4) : gosub *LStepMaze : return
	
*LBottom
	mes msg(0)
	assert		// 停止
	return
	
*LStepMaze
	wait 10		// wait 必須 : 停止しない可能性もなくはない
	goto lb( (rnd(12) + 1) * 13 \ cntPtns )
	
// @ 参照: http://goo.gl/xUPHk
// @ 「リターン先が静的にわからない」状況を簡単に考えようと思った。今は反省している。
// @ よく考えたら、リターン先は普通わからないものだった。サブルーチンと呼び出し元は一般的に一体一対応じゃないのだ。

// mes で出力された文字列を見ると戻り先がわかる。
// @ これは「サブルーチンを監視する」方法の一例