2009-11-13 66 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撿起來就好了。