我希望能够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
图表
1月8日更新
为了将来参考,我最终使用的方法是将GraphUtilities
,Combinatorica
和内置图功能结合使用。它通过将所有组合函数(例如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}}
答案 0 :(得分:2)
类似的东西:
$PreRead = # /. {str_String :>
StringReplace[
str, {RegularExpression["^s`(.*)"] :> "System`" <> "$1",
RegularExpression["^c`(.*)"] :> "Combinatorica`" <> "$1"}]} &
当然,这是在非常低的水平,所以要小心。