〜 ナンバー 〜
後入れ先出し(LIFO)

「スタックを積む」とか「キューがたまる」といった言葉を聞いたことあるかもしれません。
データを繰り返し格納していくと、先に入れたデータは奥へと格納され、
格納されたデータを順に取り出すと、後に入れた新しいデータから取り出される構造を「スタック」といい、
「LastIn,FirstOut(=LIFO)」や「FastIn,LastOut(=FILO)」と呼ばれています。
積み上げた古雑誌の山から先に取り出されるのは、上に積んだ新しい(最後に積んだ)ものですよね。
スタックとは、そのような溜込・取出を行いたい場合に利用できます。
サンプルモジュールは数値型限定ですが、応用すれば実数型や文字列型にもできるでしょう。
	

meminit 要素数
要素数保持できるデータの最大数を指定する。

push 設定値
設定値保持するデータを指定する。

pop
[パラメータなし]最後に保持したデータから順番に取り出すだけなのでパラメータは必要ない。
尚、取得したしたデータはstatに代入される。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#module
#deffunc meminit int
	mref num, 0
	dim _mem, num
	crnt = 0 : memnum = num
	return

#deffunc push int
	mref data, 0
	crnt++
	if crnt > memnum {
		repeat memnum - 1
			tmp = cnt + 1
			_mem.cnt = _mem.tmp
		loop
		crnt--
	}
	tmp = crnt - 1
	_mem.tmp = data
	return

#deffunc pop
	mref stt, 64
	stt = 0
	crnt--
	if crnt >= 0 : stt = _mem.crnt
	return
#global

	meminit 3 // 3個まで保持
	push 1    // [1]
	push 2    // [1][2]
	push 3    // [1][2][3]
	pop       // [1][2]
	mes stat
	pop       // [1]
	mes stat
	push 4    // [1][4]
	push 5    // [1][4][5]
	push 6    // [4][5][6] 3個を超えたので初めの[1]は消滅
	pop       // [4][5]
	mes stat
	pop       // [4]
	mes stat
	pop
	mes stat
	stop

meminit 要素数
要素数保持できるデータの最大数を指定する。

push 設定値
設定値保持するデータを指定する。

取得値 = pop( )
取得値取得したデータの受取先を指定する。
[パラメータなし]最後に保持したデータから順番に取り出すだけなのでパラメータは必要ない。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#module
#deffunc meminit int num
	dim _mem, num
	crnt = 0
	return

#deffunc push int data
	crnt++
	if crnt > length(_mem) {
		repeat length(_mem) - 1
			_mem(cnt) = _mem(cnt + 1)
		loop
		crnt--
	}
	_mem(crnt - 1) = data
	return

#defcfunc pop
	crnt--
	if crnt < 0 : return 0
	return _mem(crnt)
#global

	meminit 3 // 3個まで保持
	push 1    // [1]
	push 2    // [1][2]
	push 3    // [1][2][3]
	mes pop() // [1][2]
	mes pop() // [1]
	push 4    // [1][4]
	push 5    // [1][4][5]
	push 6    // [4][5][6] 3個を超えたので初めの[1]は消滅
	mes pop() // [4][5]
	mes pop() // [4]
	mes pop()