Начало работы с пакетами Mathematica - PullRequest
3 голосов
/ 13 ноября 2009

Может кто-нибудь дать совет, как начать работу с пакетами 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 ]

2 голосов
/ 13 ноября 2009

Убедитесь, что сохраненный файл "Foo.m" находится на вашем $Path, который сообщает Mathematica, какие каталоги искать при попытке загрузки пакетов, так же, как переменная окружения PATH в Unix или Windows ,

РЕДАКТИРОВАТЬ: $ContextPath не изменится, если не будет действительного оператора BeginPackage (или вы манипулируете им напрямую, используя Set или Block или что-то еще).

РЕДАКТИРОВАТЬ второе: Одна вещь, чтобы проверить, что

FileNames["Foo.m", $Path]

возвращается. Однако то, что вы описываете, звучит немного странно.

1 голос
/ 13 ноября 2009

Любая форма должна работать. Когда файл загружается с помощью 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/Applications, а Needs отлично их берет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...