2 Stimmen

Alias für Kontextpfade erstellen?

Ich möchte in der Lage sein, s'Graph und c'Graph zu verwenden, um auf System'Graph und Combinatorica'Graph (und andere Funktionen, die sich mit Combinatorica überschneiden) zu verweisen. Gibt es eine Möglichkeit, dies zu tun?

Nach Simons Idee scheint Folgendes zu funktionieren

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

Jetzt geben cCompleteGraph[5] und sCompleteGraph[5] jeweils Combinatorica- und System-Graphen zurück

Aktualisierung 8. Januar Für zukünftige Referenz, dies ist die Methode, die ich verwendet habe, um GraphUtilities, Combinatorica und die integrierte Graphenfunktionalität zusammen zu verwenden. Konflikte werden gelöst, indem alle Combinatorica-Funktionen wie Graph auf cGraph umgemappt werden und $Post wird geändert, um GraphUtilities und Combinatorica von ContextPath bei jeder Auswertung zu entfernen, da GraphUtilities'ToCombinatoricaGraph bei jedem Aufruf Combinatorica zu $ContextPath hinzufügt.

Zusammenfassend führen Sie den unten stehenden Code zu Beginn jeder Sitzung aus. Combinatorica-Funktion ist jetzt cfunc, GraphUtilities-Funktion ist GraphUtilities'func und integrierte Funktion ist einfach 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`"]; #) &;

2voto

Brett Champion Punkte 8457

Etwas wie:

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

Natürlich arbeitet dies auf einer sehr niedrigen Ebene, also seien Sie vorsichtig.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X