此为 Mathematica 4 文档,内容基于更早版本的 Wolfram 语言
查看最新文档(版本11.1)

2.6.8 上下文

总是给变量或定义选用尽可能清楚的名称是一个好思想,但这样做有时会导致 变量名很长. 在 Mathematica 中可以用上下文来组织符号名. 在引入与其它符号 不冲突的变量名的 Mathematica 程序包中上下文特别有用. 在编写或调用程序包时, 就需要了解上下文.
其基本的思想是任何符号的全名为两部分:上下文和一个短名. 全名被写为 context`short,其中`是倒引号,在Mathematica 中称为 上下文标记.

这里是具有短名 x 和上下文 aaaa 的符号

可以像其它符号一样使用这一符号

例如,可定义这个符号的值

Mathematicaa`xb`x 当作两个完全不同的符号

典型的情况是让与一个特殊的主题相关的符号有相同的上下文. 例如,表示物理单位的符号具有上下文 PhysicalUnits`,这类符号 的全名可能是 PhysicalUnits`Joule, PhysicalUnits`Mole.
尽管总可以用全名来代表一个符号,但用短名常常很方便.
Mathematica 进程中的任何点,总有一个当前的上下文 $Context, 可以用短名简单地指代这个上下文中的符号.

Mathematica 进程的默认上下文是 Global`

在当前上下文中,短名就够用了

上下文在 Mathematica 中的工作在某种程度上类似于许多操作系统的文件目录, 可以通过路径和全名指定一个文件. 但在任何点,总有一个当前目录,这类似于 Mathematica 的当前上下文. 在当前目录下的文件就可以仅用它的短名指定.
与许多操作系统中的目录一样,Mathematica 中的上下文具有启发式的特性, 例如,符号的全名可以涉及到一系列形如  ` ` `name 的上下文名.

在不同上下文中指定符号

在上下文 a`b` 中的符号

开始了一个 Mathematica 进程后,默认当前上下文是 Global`. 引入的符号通常就在这个上下文中. 但内部符号 Pi 等在 System` `Context 中.
为了方便地处理 Global`System` 中的符号,Mathematica 支持 上下文搜索路径. 在 Mathematica 进程中的任一点,有当前 上下文 $Context 和当前上下文搜索路径 $ContextPath. 搜索路径的思想是在输入一个符号的短名后,Mathematica 在一系列 上下文中搜索去找到有这个短名的符号. Mathematica 中的 context 搜索路径与 Unix 和 MS-DOS 操作系统中搜索路径相似.

默认的上下文路径包括系统定义符号的 context

输入 PiMathematica 将它翻译为具有全名 System`Pi 的符号

找出上下文和上下文搜索路径

Mathematica 中使用上下文时,在两个不同的上下文中两个符号可以 有相同的短名. 例如,在 PhysicalUnits`BiologicalOrganisms` context 中都可以使用短名 Mole. 于是, 在输入短名 Mole 后,就产生了你实际上调用了哪一个符号的问题. 解决这个问题时要弄清楚在上下文搜索路径中哪一个上下文先出现.

这里引入两个具有 Mole 短名的符号

这里对 $ContextPath 添加了两个上下文

在这里输入 Mole 时,得到了在 PhysicalUnits` 中的符号

一般地,当输入一个符号的短名后,Mathematica 认为你需要在 上下文搜索路径中最早出现的上下文中的符号. 上下文出现晚的符号将被屏蔽, 为了调用这些符号必须用全名.
在引入的新符号屏蔽了当前 $ContextPath 中已经存在的符号时, Mathematica 就会发出警告. 如果在笔记本环境中,Mathematica 就提示你要保存哪一个符号.

这里在 Global`Context 中引入了有短名 Mole 的符号,Mathematica 警告新符号屏蔽了已经存在的短名为 Mole 的符号

如果在这里输入 Mole,就会得到在 Global`Context 中的符号

如果引入的符号屏蔽了已经存在的符号,则需要重新安排 $ContextPath,或直接删去这个符号. 仅清除这个符号的值是不够的,必须从 Mathematica 中全部删除这个符号,这可以用函数 Remove[s] 来实现.

清除或删除Mathematica中的符号

删除符号 Global`Mole

此时输入 Mole 后就会得到符号 PhysicalUnits`Mole

Mathematica 显示一个符号名时,它必须选择去显示全名或短名. 它所作的是给出所有你应该输入的名称以得到特定的符号,给出当前 $Context$ContextPath 的设置.

对第一个符号先显示短名,这就是输入短名后应该得到的符号

当输入了一个短名,它既不在当前上下文内,也不在上下文的搜索路径内, Mathematica 就产生一个具有该短名的新符号,且总是把新符号放在由 $Context 指定的当 前上下文中.

这里引入具有短名 tree 的符号

Mathematica 在当前上下文 Global` 内增加了tree