检查索引变量是否在某处分配了值
Check if indexed variable has a value assigned somewhere
第 1 部分
如果我们有这个
[> restart; a[5]:=23: a[7]:=41:
然后
[> about(a); whattype(a);
a:
nothing known about this object
symbol
但是
[> print(a);
table([5 = 23, 7 = 41])
和
[> convert(a,list);
[23, 41]
所以 Maple 在某处确实有足够的关于变量 a 及其索引的信息。我们如何在不打印的情况下检查该信息?
对于小索引,这不是问题,但是如果 b[123457891234578912345789]:=789;
那么我们如何检查是否有某个索引 i
为 b[i]
定义了值以及该索引是什么i
是(不打印,即不手动)?
第 2 部分
我希望能够在函数内部使用此类变量,return 此类变量。
例如,假设我想将所有索引增加 1。如果我知道存在哪些索引,那么我可以这样做
[> a[5]:=23: a[7]:=41:
f:=proc(x) local y;
y[6]:=x[5]; y[8]:=x[7]; y;
end proc:
b:=f(a); b[6]; b[8];
b:=y
23
41
但我经常不知道变量a有哪些索引。
您可以进行多种编程查询,
restart;
a[5]:=23: a[7]:=41:
# test whether a is assigned
assigned('a');
true
# test whether a is assigned a table
type(a, table);
true
# test whether table a has any indexed values
evalb( nops([indices(a, 'nolist')]) > 0 );
true
assigned('a'[7]);
true
如果您愿意,可以在尝试访问和使用索引引用之前进行此类查询(即检查它是否具有分配的值)。例如,
if type(a,table) and assigned('a'[7]) then
a[7];
end if;
41
if type(a, table) then
[indices(a, 'nolist')];
end if;
[5, 7]
第 1 部分
如果我们有这个
[> restart; a[5]:=23: a[7]:=41:
然后
[> about(a); whattype(a);
a:
nothing known about this object
symbol
但是
[> print(a);
table([5 = 23, 7 = 41])
和
[> convert(a,list);
[23, 41]
所以 Maple 在某处确实有足够的关于变量 a 及其索引的信息。我们如何在不打印的情况下检查该信息?
对于小索引,这不是问题,但是如果 b[123457891234578912345789]:=789;
那么我们如何检查是否有某个索引 i
为 b[i]
定义了值以及该索引是什么i
是(不打印,即不手动)?
第 2 部分
我希望能够在函数内部使用此类变量,return 此类变量。 例如,假设我想将所有索引增加 1。如果我知道存在哪些索引,那么我可以这样做
[> a[5]:=23: a[7]:=41:
f:=proc(x) local y;
y[6]:=x[5]; y[8]:=x[7]; y;
end proc:
b:=f(a); b[6]; b[8];
b:=y
23
41
但我经常不知道变量a有哪些索引。
您可以进行多种编程查询,
restart;
a[5]:=23: a[7]:=41:
# test whether a is assigned
assigned('a');
true
# test whether a is assigned a table
type(a, table);
true
# test whether table a has any indexed values
evalb( nops([indices(a, 'nolist')]) > 0 );
true
assigned('a'[7]);
true
如果您愿意,可以在尝试访问和使用索引引用之前进行此类查询(即检查它是否具有分配的值)。例如,
if type(a,table) and assigned('a'[7]) then
a[7];
end if;
41
if type(a, table) then
[indices(a, 'nolist')];
end if;
[5, 7]