BASIC(配列の要素数)

近代の言語では、配列の要素は配列の変数さえ分かればすぐに取得できますね。

takk@deb9:~$ perl -e '@arr=1..10;print scalar(@arr) ."\n"'
10
takk@deb9:~$ perl -e '$arr[31]=10;print scalar(@arr) ."\n"'
32
takk@deb9:~$

BASICではどうしていたのでしょう。

$lang: "qb"

dim a(50)

print lbound(a)
print ubound(a)
size = ubound(a) - lbound(a) + 1
print "elements = ";size

このようにbound(境界)を求める関数を使ってました。lboundはlower boundで配列添え字の最小値が取得でき、uboundは、upper boundで最大値が取得できます。
実行結果です。

 0
 50
elements =  51

要素数は、最大50-最小0+1の、51になります。
OPTION BASEを変えてみましょう。

$lang: "qb"
option base 10
dim b(20)

print lbound(b)
print ubound(b)
size = ubound(b) - lbound(b) + 1
print "elements = ";size

最小が10に底上げされたので、要素数は11です。

 10
 20
elements =  11

二次元配列の場合は残念なことに、次元数をbound関数に指定せねばなりません。

$lang: "qb"
option base 0

dim c(7,9)
print lbound(c,1)
print ubound(c,1)
size = ubound(c,1) - lbound(c,1) + 1
print "elements = ";size
print lbound(c,2)
print ubound(c,2)
size = ubound(c,2) - lbound(c,2) + 1
print "elements = ";size
 0
 7
elements =  8
 0
 9
elements =  10

三次元になっても指定が面倒なのは同じです。

$lang: "qb"
option base 3

dim d(3,3,3)
print lbound(d,3)
print ubound(d,3)
size = ubound(d,3) - lbound(d,3) + 1
print "elements = ";size
 3
 3
elements =  1

コメント

タイトルとURLをコピーしました