Maple中的sequence, set和list

前言

在数学计算中, 序列、集合与列表是最常用的几种基本数据类型。在Maple中, 有相应的数据结构与之对应。本文就这几种数据结构在Maple的使用方法进行简要说明。

定义

  • sequence, es
    一序列的值
  • set {es}
    无序的值的序列, 使用{}表示, 不能重复。
  • list [es]
    有序的值的序列, 使用[]表示, 可以重复。

set和list均可用numelems() 函数计算, 如numelems(S), numelems(L)。

简介

  • 集合是用大括号 {} 括起来的无序表达式的无序序列, 从数学意义上表示一个集合。
  • 列表是括在方括号 [] 中的表达式的有序序列。表达式的顺序是es的顺序。
  • 注意, es可能为空, 因此空集用 { } 表示, 空列表用 [ ] 表示。
  • 在输出中, 空集的排版为\emptyset
  • 集或列表S的元素数由 numelems(S)numelems(S) 求出。

访问元素

  • 可以通过选择操作来提取集合或列表的元素。因此, 如果S是集合或列表, 则 S[i]S[i] 选择第 ii 个元素。或者, 可以使用 op(i,S)op(i, S)。元素从1开始编号, 因此 S[1]S[1] 提取第一个元素。也可以使用负下标, 如 S[1]S[-1] 选择最后一个元素, S[2]S[-2] 选择第二个元素, 依此类推。
  • 可以提取列表或集合 SS 的多个元素。使用 op(i..j,S)op(i..j,S) 选择子序列 (S[i],S[i+1],...,S[j])(S[i], S [i + 1],...,S [j])。如果 SS 是集合, 则选择 S[i..j]S[i..j] 选择子集 {op(i..j,S)}\{op(i..j,S)\}。如果 SS 是一个列表, 则选择 S[i..j]S[i..j] 选择子列表 [op(i..j,S)][op(i..j,S)]。同样地, 列表也可以使用负下标。
  • 列表和集合可以嵌套, 在这种情况下, 可以通过以下两种方式之一进行选择:S[i][j]...[n]S[i][j]...[n]S[i,j,...,n]S[i, j, ..., n]
  • 若要提取列表的内容或将 LL 设置为序列, 请使用 op(L)op(L) 函数或空选择运算符 L[]L[]

修改元素

注意:对列表或集合的以下修改会导致创建新列表或集合, 而不是就地修改原始列表或集合。为了节省空间和时间, 当数据的数量或对其的修改数量很大时, 使用Array可能会更好。有关可变和不可变数据结构的更多信息, 请参阅《 Maple编程指南》的“基本数据结构”一章。

  • 通过 [op(L),x][op(L), x] 将元素 xx 追加到列表 LL。使用并运算符 S  union{x}()S \; union \{x\}() 将元素x插入到集合S中。
  • 可以用 subsop(i=x,L)subsop(i = x, L) 来将列表 LL 的第 ii 个元素替换为 xx
  • 为了方便起见, 操作 L[i]=xL [i]:= x也起作用, 但仅适用于简短列表。除非知道列表很小, 否则不建议使用此操作。
  • 删除列表 LL 的第 ii 个元素是 subsop(i=NULL,L)subsop(i = NULL, L)。使用减号运算符 S  minus{x}()S \; minus \{x\}()从集合 SS 中删除元素 xx

设置和列出操作

  • 要测试元素x是在列表中还是集合L中, 请使用 $member(x, L)或L()中的x。
  • 若要测试集合S是否是集合T的子​​集, 请使用子集运算符S子集T()。
  • 要找到两个集合S和T的交集, 请使用S与T()相交。
  • 要找到两个集合S和T的并集, 请使用S union T()。
  • 要找到两组S和T的差, 请使用S减去T()。
  • 有关这些设置操作的更多信息, 请参见设置运算符。
  • 可以在软件包ListTools中找到更多列表操作。

设置顺序

集合具有确定性的顺序, 对于大多数对象, 该顺序不基于运行时属性。这意味着当输入{b, c, a}时, 无论您何时创建该集合, 定单都将固定为{a, b, c}。该规则的一个明显例外是, 当一个集合包含多个相同类型的可变对象时。例如, 集合内的两个向量可以在不同的会话中以任一顺序出现。

通常, 对象排序首先由可快速识别的特征(例如其类别或大小)确定。默认比较顺序按以下顺序检查属性:

  1. 对象ID:这导致将相同类型的数据结构分组在一起。例如, 整数将在精确的有理数, 浮点数和复数之前出现。
  2. 对象长度:这会将相同大小的对象组合在一起。 “长度”是基础数据结构的属性。结果, {-2 ^ 200, -2 ^ 100}的数字顺序不是递增的, {bb, aaaaaaaa}的字母顺序也不是;在这两种情况下, 较短的数据结构首先出现。
  3. 字典顺序或数字顺序:此数字按递增的数字顺序排列, 字符串按字典顺序排列。
  4. 对组件递归:这将根据其子组件的上述属性对复合对象进行排序。例如{f(z), g(a)}将传递上述属性, 因为f(z)和g(a)都是相同长度的函数对象。因此, 下一级别的排序将比较每个函数的名称f和g, 它们将属于规则3。请注意, 如果唯一表示形式, 则{x + 1,1 + y}之类的表达式的排序可能仍取决于会话x + 1的x的顺序为1 + x, 或者第二个表达式是y + 1而不是1 + y。
  5. 地址:在某些情况下, 对象在各个方面都是相同的, 例如本地名称x和全局名称x。发生这种情况时, 将使用给定对象的机器地址。

参考资料

[1] https://www.maplesoft.com/support/help/maple/view.aspx?path=set

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章