2010-12-06 7 views
2

Je voudrais être en mesure de faire s'Graph et c'Graph pour faire référence à System'Graph et Combinatorica'Graph (et d'autres fonctions en conflit avec Combinatorica) est-il un moyen de faire cela?Créer un alias pour les chemins de contexte?

Après l'idée de Simon, ce qui suit semble fonctionner

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

maintenant cCompleteGraph[5] et sCompleteGraph[5] retour Combinatorica et System graphiques respectivement

Mise à jour le 8 janvier Pour référence ultérieure, c'est la méthode que je fini en utilisant pour utiliser GraphUtilities, Combinatorica et fonctionnalité de graphique intégré ensemble. Il résout les conflits en remappant toutes les fonctions de Combinatorica comme Graph-cGraph et change $Post pour enlever GraphUtilities et Combinatorica de ContextPath sur chaque évaluation, nécessaire parce que GraphUtilities'ToCombinatoricaGraph ajoute Combinatorica-$ContextPath à chaque appel.

Pour récapituler, exécutez le code ci-dessous au début de chaque session. Combinatorica func est maintenant cfunc, GraphUtilities func est GraphUtilities'func et intégré Func est juste 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

De combien de symboles différents avez-vous besoin? Serait-il possible de simplement faire cGraph = Combinatorica'Graph (et garder Combinatorica de $ ContextPath)? – Janus

+0

Est-ce une chose v8, d'ailleurs? Sur mon système v7 'Intersection @@ (Noms [# <>" \ '*"] &/@ {"Combinatorica", "Système"}) 'renvoie une liste vide. – Janus

+0

Yup, la version 8, il y a maintenant deux types d'objets Graph, semble que WRI est en passe de remplacer les fonctionnalités de Combinatorica par des built-ins –

Répondre

2

Quelque chose comme:

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

Bien sûr, cela fonctionne à un niveau très bas, donc prendre se soucier.

+0

Cela donne 'StringReplace :: strse: String ou la liste des chaînes attendues à la position 1 dans StringReplace [RowBox [{2, +, 5}], { RegularExpression [^ s' (. *)]:> System' <> $ 1, RegularExpression [^ c' (. *)]:> Combinatorica' <> $ 1}]. ' –

+0

Il semble" c'CompleteGraph [5] " se transforme en "RowBox [List [" c'CompleteGraph "," ["," 5 ","] "]]" avant d'être passé à $ PreRead –

+0

@Yaroslav: corrigé maintenant. C'est ce que je reçois pour tester uniquement les symboles et pas les expressions plus générales. (D'où le commentaire à faire attention lors de l'utilisation de $ PreRead. :-) –

Questions connexes