Wolfram mathematica mathematica中的包导入问题

Wolfram mathematica mathematica中的包导入问题,wolfram-mathematica,Wolfram Mathematica,在mathematica中(我使用的是mma 5.0(估计很旧)),如果我键入以下内容作为一行: Needs["Graphics`Master`"]; Animate[Plot[Sin[n x], {x, 0, 2 Pi}, Axes -> False], {n, 1, 6, 1}] 然后我收到了很多错误/警告。但是如果我单独输入,它就可以正常工作了。如何使它在一个代码块中工作 谢谢 正如belisarius指出的,你现在的问题有点中心化。然而,这个问题在当前版本中仍然存在。例如 Nee

在mathematica中(我使用的是mma 5.0(估计很旧)),如果我键入以下内容作为一行:

Needs["Graphics`Master`"]; Animate[Plot[Sin[n x], {x, 0, 2 Pi}, Axes -> False], {n, 1, 6, 1}]
然后我收到了很多错误/警告。但是如果我单独输入,它就可以正常工作了。如何使它在一个代码块中工作


谢谢

正如belisarius指出的,你现在的问题有点中心化。然而,这个问题在当前版本中仍然存在。例如

Needs["Combinatorica`"]
ToCycles[{3, 4, 1, 2}]
工作正常,而(在重新启动内核之后)

失败,错误如下:

“ToCycles::shdw:Symbol ToCycles 出现在多个上下文中 {combinatica`,Global`};定义 在上下文中,它可能是影子 或者被其他定义所遮蔽。”

用Mathematica的术语来说,“一行”不起作用的原因是Mathematica试图在计算
需求之前解析行中的所有符号(这让我感到惊讶)。这将
ToCycles
解析为
Global`ToCycles
(从而在符号表中输入此符号),然后
需要
有机会加载
combinatica`ToCycles
的定义并将
combinatica
添加到。要使一行程序正常工作,必须使用
ToCyles的全名

Needs["Combinatorica`"]; Combinatorica`ToCycles[{3, 4, 1, 2}]

要理解该错误,您需要知道Mathematica中的所有符号都具有
上下文`name
的形式。上下文类似于许多其他语言中的名称空间。现在,如果符号(如
ToCycles
)在没有上下文的情况下被引用,Mathematica将查看当前
$ContextPath
中的上下文,并查看符号是否在这些上下文中定义。如果不是,则符号将在当前上下文中解析,
$context
,该上下文在正常使用中为
全局

加载包时,该包的符号将在包上下文中定义(例如,
Combinatica
),当包完全加载时,此上下文将添加到
$ContextPath
,以便您可以通过符号的短名称访问符号。
现在,您可以看到错误的含义:由于解析符号时,
combinatica
尚未加载,
ToCycles
解析为
Global`ToCycles
。加载包后,Mathematica会检查所有短名称是否唯一,并发现在这种情况下,短名称
ToCycles
现在在
$ContextPath
上的两个上下文中定义,一个因此“隐藏”了另一个。要引用这些符号中的特定符号,必须使用全名,例如
combinatica`ToCycles

要解决阴影冲突,只需删除不需要的符号:

Remove[Global`ToCycles]

不知道它的可读性如何,但希望它能有所帮助……

您应该将
需要[]
调用放在笔记本顶部的一个单独的块中,或者放在package.m文件的第一个单独的行中

内核读取整行代码并对其进行解析,包括在开始计算之前确定符号的上下文。为避免出现问题,请不要使用分号。在包中的每个语句后放置两个换行符。
特别是在
开始打包[]
和/或
需要[]

@Janus:如何使用combinatica'ToCycles?另外,如何解决在同一代码块中编写需求和ToCycles的问题?非常感谢!解释得很好!天真的1-liner不起作用,这有点令人惊讶。@Quang Li:它必须是Combinatica和ToCycles之间的一个“backtick”,但我花了一段时间才弄清楚如何在我的答案中输入一个字面上的backtick。现在应该可以了吧?还有,在我看到你的评论之前,我添加了正确的一行:)@Simon:谢谢!这也让我感到惊讶。一直认为分号和换行符是完全可以互换的…+10从来没有发生在我身上。。。只是因为我总是在一行中单独使用需求[]。。。很高兴知道为什么!
Remove[Global`ToCycles]