Maxima 语言是否具有 map/dictionary 数据结构?如果有,如何启动以及如何访问其值和键?
Does the Maxima language have a map/dictionary data structure and if it does, how is one initiated and how are its values and keys accessed?
SourceForge 目前已关闭,因此我无法访问 Maxima 的文档并带着这个问题来到这里。我正在 Moodle 中构建一个可以从这种容器类型中受益的问题。我试过了
optionmap : {"key1" : value1, "key2" : value2};
minmaxlist : [[max(resurssiMap["key1"],resurssiMap["key2"]),true,<key of maximum value>],
[min(resurssiMap["key1"],resurssiMap["key2"]),false,<key of minimum value>]];
但这会产生错误 assignment: cannot assign to key1
。
有没有办法解决这个问题。在上面的代码示例中,我想插入最大值和最小值的键(在执行 max()
- 和 min()
- 函数之前我不会知道)它们各自的位置如图所示,我也不知道该怎么做。
关于如何实现这一点有什么想法吗?
Maxima 有两种哈希 table。一个是散列 table,作为 属性 附加到符号,另一个作为值附加到符号。 (这类似于作为属性附加的命名函数与作为值的 lambda 表达式之间的区别。)
从散列 table 中检索值的语法是 a[x]
,其中 a
是附加散列 table 的符号,x
是关键。将值存储在散列 table 中的语法是 a[x] : y
,其中 y
是要存储的值。没有文字散列 table 构造;存储多个值的唯一方法是对不同的 x
和 y
重复执行 a[x] : y
。当然可以设计一个函数来遍历键和值列表并将它们一一存储。
Hash table默认为符号属性;您可以通过设置 use_fast_arrays:true
来启用散列 tables 作为值。 (这个标志的名字很容易混淆,我同意。)哈希 table 是在第一次存储值时创建的。例如
footable[mykey] : myvalue;
创建附加到符号 footable
的散列 table 作为 属性 或值(取决于 use_fast_arrays
)。
键可以是任何 Maxima 表达式。可以有多个键。
这是一个小例子。
(%i2) footable[x + 1, x - 1] : "v1" $
(%i3) footable["hmm", 12345] : 1 - a*b $
(%i4) footable[[1,2,3], sin(1)] : cos(2) $
(%i5) footable;
(%o5) footable
(%i6) footable[[1,2,3], sin(1)];
(%o6) cos(2)
(%i7) footable[1,2];
(%o7) footable
1, 2
(%i8) kill(footable) $
(%i9) use_fast_arrays : true $
(%i10) footable[x + 1, x - 1] : "v1" $
(%i11) footable["hmm", 12345] : 1 - a*b $
(%i12) footable[[1,2,3], sin(1)] : cos(2) $
(%i13) footable;
(%o13) {Lisp Array:
#S(HASH-TABLE TEST FASTHASH-EQUAL ((((MLIST SIMP) 1 2 3) ((%SIN \
SIMP) 1)) . ((%COS SIMP) 2))
((hmm 12345) . ((MPLUS SIMP) 1 ((MTIMES SIMP) -1 $A $B))) (((\
(MPLUS SIMP) 1 $X) ((MPLUS SIMP) -1 $X)) . v1))}
(%i14) footable[[1,2,3], sin(1)];
(%o14) cos(2)
(%i15) footable[1,2];
(%o15) false
请注意,值哈希 tables return false
对于不在 table 中的键,而 属性 哈希 table returns一个下标表达式。另请注意,值散列 table 的值是 Lisp 散列 table 对象,而 属性 散列 table(即 %o5
)的值是只是符号本身。
另请参阅 arrayinfo
和 listarray
以分别获取键或值的列表。
我无法通过您展示的示例来判断您想要实现什么;也许你可以再解释一下。
SourceForge 目前已关闭,因此我无法访问 Maxima 的文档并带着这个问题来到这里。我正在 Moodle 中构建一个可以从这种容器类型中受益的问题。我试过了
optionmap : {"key1" : value1, "key2" : value2};
minmaxlist : [[max(resurssiMap["key1"],resurssiMap["key2"]),true,<key of maximum value>],
[min(resurssiMap["key1"],resurssiMap["key2"]),false,<key of minimum value>]];
但这会产生错误 assignment: cannot assign to key1
。
有没有办法解决这个问题。在上面的代码示例中,我想插入最大值和最小值的键(在执行 max()
- 和 min()
- 函数之前我不会知道)它们各自的位置如图所示,我也不知道该怎么做。
关于如何实现这一点有什么想法吗?
Maxima 有两种哈希 table。一个是散列 table,作为 属性 附加到符号,另一个作为值附加到符号。 (这类似于作为属性附加的命名函数与作为值的 lambda 表达式之间的区别。)
从散列 table 中检索值的语法是 a[x]
,其中 a
是附加散列 table 的符号,x
是关键。将值存储在散列 table 中的语法是 a[x] : y
,其中 y
是要存储的值。没有文字散列 table 构造;存储多个值的唯一方法是对不同的 x
和 y
重复执行 a[x] : y
。当然可以设计一个函数来遍历键和值列表并将它们一一存储。
Hash table默认为符号属性;您可以通过设置 use_fast_arrays:true
来启用散列 tables 作为值。 (这个标志的名字很容易混淆,我同意。)哈希 table 是在第一次存储值时创建的。例如
footable[mykey] : myvalue;
创建附加到符号 footable
的散列 table 作为 属性 或值(取决于 use_fast_arrays
)。
键可以是任何 Maxima 表达式。可以有多个键。
这是一个小例子。
(%i2) footable[x + 1, x - 1] : "v1" $
(%i3) footable["hmm", 12345] : 1 - a*b $
(%i4) footable[[1,2,3], sin(1)] : cos(2) $
(%i5) footable;
(%o5) footable
(%i6) footable[[1,2,3], sin(1)];
(%o6) cos(2)
(%i7) footable[1,2];
(%o7) footable
1, 2
(%i8) kill(footable) $
(%i9) use_fast_arrays : true $
(%i10) footable[x + 1, x - 1] : "v1" $
(%i11) footable["hmm", 12345] : 1 - a*b $
(%i12) footable[[1,2,3], sin(1)] : cos(2) $
(%i13) footable;
(%o13) {Lisp Array:
#S(HASH-TABLE TEST FASTHASH-EQUAL ((((MLIST SIMP) 1 2 3) ((%SIN \
SIMP) 1)) . ((%COS SIMP) 2))
((hmm 12345) . ((MPLUS SIMP) 1 ((MTIMES SIMP) -1 $A $B))) (((\
(MPLUS SIMP) 1 $X) ((MPLUS SIMP) -1 $X)) . v1))}
(%i14) footable[[1,2,3], sin(1)];
(%o14) cos(2)
(%i15) footable[1,2];
(%o15) false
请注意,值哈希 tables return false
对于不在 table 中的键,而 属性 哈希 table returns一个下标表达式。另请注意,值散列 table 的值是 Lisp 散列 table 对象,而 属性 散列 table(即 %o5
)的值是只是符号本身。
另请参阅 arrayinfo
和 listarray
以分别获取键或值的列表。
我无法通过您展示的示例来判断您想要实现什么;也许你可以再解释一下。