2009-11-13 71 views
3

有人可以提供关于如何开始使用mathematica软件包的一些建议吗?Mathematica软件包入门

我可以将以下内容保存在名为“Foo.m”的文件中。当我在该文件中运行输入单元格时,可以看到在$ ContextPath变量中反映的效果。

BeginPackage["Foo`"] 

bar::usage = "barfunction"; 

Begin["`private`"] 
bar[w_] := w; 
End[]; 

EndPackage[]; 

然而,在我的笔记本我有以下几点:

#include<foo> 
SetDirectory[ToFileName[{$HomeDirectory, "My Documents", "mathematica"}]]; 
Needs["Foo`"] 
$ContextPath 

但需要调用失败出于某种原因,和$ contextPath中保持不变。

编辑

我相信,我有一个部分解决方案现在的工作,我在文件中的电池没有标记为初始化单元 - 和而我现在可以<<Foo'Needs["Foo“]`仍不能正常工作。

回答

2

检查以确保所保存的文件,“Foo.m”,是对你的$Path,它告诉Mathematica的尝试时加载的包,很像在PATH环境变量,目录中查找中Unix或Windows。

编辑:$ContextPath不会改变,除非有实际BeginPackage声明(或者你操纵它直接使用SetBlock或东西)。

编辑第二:一件事是检查什么

FileNames["Foo.m", $Path] 

回报。不过,你所描述的听起来有点奇怪。

+0

Pilly,简单地假设如果文件在当前工作目录(我相信它是由SetDirectory设置的)和“。”就足够了。是在$路径中,该文件应该被发现? – 2009-11-13 01:22:25

1

任何一种形式都应该有效。当使用Get(或<<)或Needs加载文件时,首先搜索DirectoryStack[]顶部的目录,然后搜索$Path。 (SetDirectory不会更改$Path,因此FileNames["Foo.m", $Path]不会找到Foo.m。)但是,FindFile默认搜索Directory[]$Path。您可以通过执行以下测试:

FindFile["Foo`"] 
SetDirectory[<Foo dir>] 
FindFile["Foo`"] 

它应该返回

$Failed 
<Foo dir> 
<Foo dir>/foo.m 

如果FindFile可以找到Foo.m然后Needs应该能找到它。一般来说,我把我的包裹放在$UserBaseDirectory/ApplicationsNeeds捡起来就好了。