为上下文路径创建别名?

时间:2010-12-06 04:30:27

标签: wolfram-mathematica

我希望能够s'Graphc'Graph引用System'GraphCombinatorica'Graph(以及与Combinatorica冲突的其他功能)是否有办法这样做?

遵循西蒙的想法,以下似乎有效

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

现在cCompleteGraph[5]sCompleteGraph[5]分别返回CombinatoricaSystem图表

1月8日更新 为了将来参考,我最终使用的方法是将GraphUtilitiesCombinatorica和内置图功能结合使用。它通过将所有组合函数(例如Graph)重新映射到cGraph并更改$Post以在每次评估时从ContextPath中删除GraphUtilities和Combinatorica来解决冲突,因为GraphUtilities'ToCombinatoricaGraph添加了Combinatorica $ContextPath每次通话都要cfunc

总结一下,在每个会话开始时执行以下代码。 Combinatorica func现在是GraphUtilities'func,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}}

1 个答案:

答案 0 :(得分:2)

类似的东西:

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

当然,这是在非常低的水平,所以要小心。