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()
-functions时才知道)插入它们各自的位置,我没有知道怎么做。关于如何实现这一目标的任何想法?
最佳答案
Maxima有两种哈希表。一个是哈希表,它作为属性附加到符号上,另一个是作为值附加到符号上。 (这类似于作为属性附加的命名函数与作为值的lambda表达式之间的区别。)
从哈希表中检索值的语法为a[x]
,其中a
是哈希表所附加的符号,而x
是键。在哈希表中存储值的语法是a[x] : y
,其中y
是要存储的值。没有文字哈希表构造;存储多个值的唯一方法是针对不同的a[x] : y
和x
重复执行y
。当然,可以设计一种函数来遍历键和值的列表,并将其一一存储。
哈希表默认为符号属性;您可以通过设置use_fast_arrays:true
将哈希表作为值启用。 (我同意,该标志的名称非常混乱。)第一次将值存储到哈希表时,会创建该哈希表。例如。
footable[mykey] : myvalue;
创建作为属性或值(取决于
footable
)附加到符号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
请注意,值哈希表为不在表中的键返回
false
,而属性哈希表返回下标表达式。还请注意,值哈希表的值是Lisp哈希表对象,而属性哈希表(即%o5
)的值只是符号本身。另请参见
arrayinfo
和listarray
以分别获取键或值的列表。我无法通过显示的示例来说明您要实现的目标。也许您可以解释更多。
关于dictionary - Maxima语言是否具有map/dictionary数据结构,如果有,则如何启动它以及如何访问其值和键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50886805/