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

「スタックを積む」とか「キューがたまる」といった言葉を聞いたことあるかもしれません。
データを繰り返し格納していくと、後から追加したデータは先のデータより奥へと格納され、
格納されたデータを順に取り出すと、先に入れた古いデータから取り出される構造を「キュー」といい、
「FastIn,FirstOut(=FIFO)」と呼ばれています。
トコロテンを作る時に使う容器をご存知でしょうか?
トコロテンを天付きと呼ばれる容器にセットし、天付き棒でトコロテンを押し出すと、
容器の先端から先にセットした分のトコロテンから麺状に分断されて出てきます。
キューとは、そのような溜込・取出を行いたい場合に利用できます。
サンプルモジュールは数値型限定ですが、応用すれば実数型や文字列型にもできるでしょう。
	

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

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

deq
[パラメータなし]最後に保持したデータから順番に取り出すだけなのでパラメータは必要ない。
尚、取得したしたデータは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
#module
#deffunc meminit int
	mref num, 0
	dim _mem, num
	crnt = 0 : memnum = num
	return

#deffunc enq int
	mref data, 0
	if crnt + 1 < memnum : crnt++
	repeat memnum - 1, 1
		i = memnum - cnt
		j = memnum - cnt - 1
		_mem.i = _mem.j
	loop
	_mem = data
	return

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

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

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

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

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

 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
#module
#deffunc meminit int num
	dim _mem, num
	crnt = 0
	return

#deffunc enq int data
	if crnt + 1 < length(_mem) : crnt++
	repeat length(_mem) - 1, 1
		_mem(length(_mem) - cnt) = _mem(length(_mem) - cnt - 1)
	loop
	_mem(0) = data
	return

#defcfunc deq
	if crnt < 0 : return 0
	crnt--
	return _mem(crnt + 1)
#global

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