Maxima:Maxima如何称呼“数组”?

3

我有点困惑;我注意到如果我这样做:

a[sqrt(2)] : 1;
arrays;

我会得到:

我将获得:

[a]

所以,a 是Maxima中的一个数组…但是sqrt(2)是一个无理数。
我曾经认为数组是由索引排序的项的集合,其中这些索引是整数……我承认我的“数组”定义受到了其他“非符号”编程语言的强烈影响。在那些语言中,数组“映射”到计算机内存的某个连续区域。因此,使用整数作为索引是很自然的,因为整数是可数的。然而,实数是不可数的。
显然,Maxima似乎有一个不同的术语“数组”的定义:它到底是什么?(文档没有定义它,至少在专门介绍数组的文档部分中没有引言段落
1个回答

3

Maxima对于数组、列表和矩阵的概念非常混乱,因为这些想法在项目多年的发展中累积了很多。

Maxima的"下标变量(subscripted variable)"是带有下标且没有赋值的符号。例如a[sqrt(2)]就是一个没有赋值的下标变量。

Maxima的"未声明数组(undeclared array)"是一个哈希表,带有任意键值,与数组符号作为符号属性关联,而不是作为值。你提供的a[sqrt(2)]:1就是一个未声明数组。当值被赋予时,Maxima会创建数组a

Maxima的"已声明数组(declared array)"是一个连续的存储空间,与数组符号作为符号属性关联,而不是作为值。

Maxima的"Lisp数组(Lisp array)"是一个连续的存储空间,与数组符号作为符号值关联。

Maxima的"快速数组(fast array)"是一个哈希表,与数组符号作为符号值关联。

是的,这很混乱。对此我感到抱歉。这些都是有趣的想法,但并没有统一的框架。我甚至还没提到列表和矩阵。希望这些信息能对你有所帮助。


不要抱歉!(^.^)我还有几个问题要问你:我真的不明白“符号属性”和“符号值”的区别...其他问题:创建“声明数组”的唯一方法是调用array(),对吗?如果我想创建“lisp数组”或“快速数组”,该怎么做? - Gael Lorieul
Lisp有一个符号具有多个“插槽”的概念(类似于哈希表的键)。有一个函数插槽、一个值插槽、一个属性插槽,也许还有其他的。如果一个符号可以同时拥有值和函数,那么它被称为Lisp-2;如果一次只能拥有一个,那么它被称为Lisp-1。属性列表只是一个键和值的列表;这是一种将任意东西与符号关联起来的简单方法。将数组的存储放在属性列表中,而不是在符号值中的优点是,当您输入例如a时,您只会看到a,而不是整个数组。 - Robert Dodier
关于已声明的数组,它们是通过array创建的。Lisp数组是通过make_array创建的,当全局标志use_fast_arraystrue时,快速数组会自动创建(作为未声明的数组)。 - Robert Dodier

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接