2010-12-06 5 views
2

Хотелось бы иметь возможность делать 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 графы соответственно

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

Подводя итог, выполните приведенный ниже код в начале каждого сеанса. Combinatorica FUNC теперь cfunc, GraphUtilities FUNC является GraphUtilities'func, и встроенный в 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`"]; #) &; 
+0

Сколько различных символов вам нужно? Можно ли просто сделать cGraph = Combinatorica`Graph (и сохранить Combinatorica в $ ContextPath)? – Janus 2010-12-06 05:19:03

+0

Это, кстати, вещь v8? В моей системе v7 `Intersection @@ (Имена [# <>" \ `*"] &/@ {"Combinatorica", "System"}) `возвращает пустой список. – Janus 2010-12-06 05:26:40

ответ

2

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

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

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

Смежные вопросы