Я хотел бы иметь возможность сделать 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`"]; #) &;