Создание псевдонима для контекстных путей? - PullRequest
2 голосов
/ 06 декабря 2010

Я хотел бы иметь возможность сделать s'Graph и c'Graph для ссылки на System'Graph и Combinatorica'Graph (и другие функции, конфликтующие с Combinatorica). Есть ли способ сделать это?

Следуя идее Саймона, кажется, что следующее работает

{Set @@ {ToExpression["c" <> Last[StringSplit[#, "`"]]], 
      ToExpression[#]}} & /@ Names["Combinatorica`*"];
{Set @@ {ToExpression["s" <> Last[StringSplit[#, "`"]]], 
      ToExpression[#]}} & /@ Names["System`*"];

Теперь cCompleteGraph[5] и sCompleteGraph[5] возвращают Combinatorica и System графики соответственно

Обновление 8 января Для дальнейшего использования, это метод, который я в конечном итоге использовал, чтобы использовать GraphUtilities, Combinatorica и встроенную функциональность графиков вместе.Он разрешает конфликт, переназначая все функции комбинаторики, такие как Graph, на cGraph и изменяя $Post для удаления GraphUtilities и Combinatorica из ContextPath при каждой оценке, что необходимо, поскольку GraphUtilities'ToCombinatoricaGraph добавляет Combinatorica к $ContextPath при каждом вызове.

Чтобы подвести итог, выполняйте приведенный ниже код в начале каждого сеанса.Функция Combinatorica теперь cfunc, функция GraphUtilities - GraphUtilities'func, а встроенная функция - просто func

Needs["Combinatorica`"];
combNames = Names["Combinatorica`*"];
{Set @@ {ToExpression["c" <> Last[StringSplit[#, "`"]]], 
      ToExpression[#]}} & /@ Names["Combinatorica`*"];
Needs["GraphUtilities`"];
$ContextPath = DeleteCases[$ContextPath, "Combinatorica`"];
$Post = ($ContextPath = 
     DeleteCases[$ContextPath, 
      "Combinatorica`" | "GraphUtilities`"]; #) &;

1 Ответ

2 голосов
/ 06 декабря 2010

Что-то вроде:

$PreRead = # /. {str_String :> 
     StringReplace[
      str, {RegularExpression["^s`(.*)"] :> "System`" <> "$1", 
       RegularExpression["^c`(.*)"] :> "Combinatorica`" <> "$1"}]} &

Конечно, это работает на очень низком уровне, поэтому будьте осторожны.

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