内置的Mathematica命令Save[file, symbol]
使用FullDefinition[]
来查找定义symbol
和所有子定义。
例如,命令
a:=b
c:=2a+b
Save[ToFileName[NotebookDirectory[],"test.dat"],c]
生成包含
的文件test.datc := 2*a + b
a := b
我有一个包含很多美化MakeBoxes
类型定义的程序,当我保存[]许多单独的结果时,我不想要保存。
就上面的简单示例而言,我不希望将a := b
定义保存到文件中。有没有人知道实现这一目标的简洁方法?
答案 0 :(得分:9)
根据文档,Save
使用FullDefinition
,而您希望使用Definition
。使用Block
我们可以覆盖任何符号的全局定义,特别是在运行FullDefinition
时将Definition
替换为Save
:
Block[{FullDefinition},
FullDefinition = Definition;
Save[filename, c]
];
FilePrint[filename]
DeleteFile[filename]
神奇的作品:
c := 2*a + b
EDIT。用正确的属性包装:
SetAttributes[truncatedSave, HoldRest]
truncatedSave[filename_, args__] := Block[{FullDefinition},
FullDefinition = Definition;
Save[filename, args]];
答案 1 :(得分:1)
我认为
DumpSave["test1", c]
是的。
示例代码:
a := b;
c := 2 a + b;
DumpSave["test1", c];
Clear[a, c];
<< test1
?a
?c
停止
_____________________
Global`a
_____________________
Global`c
c:=2 a+b
答案 2 :(得分:1)
刚发现这是随机浏览帮助系统。
从未使用 RunThrough ...无论如何似乎做你想要的。
Clear["Global`*"];
a := b;
c := 2 a + b;
mathcommand = StringReplace[First[$CommandLine], "MathKernel" -> "math"];
outputfile = "c:\\rtout";
RunThrough[mathcommand <> " -noprompt", Unevaluated[Put[Definition[c], "c:\\rtout"]]]
FilePrint[outputfile]
Clear[a, c];
<< "c:\\rtout"
DeleteFile[outputfile]
?c
出
c := 2*a + b
_______________________________
Global`c
c:=2 a+b
编辑..在带有一点Hold-Fu的列表上工作
Clear["Global`*"];
(*Trick here *)
f[l_] := Definition @@ HoldPattern /@ Unevaluated@l;
SetAttributes[f, HoldFirst];
a := b;
c := 2 a + b;
d := 3 a + b;
mathcommand = StringReplace[First[$CommandLine], "MathKernel" -> "math"];
outputfile = "c:\\rtout";
RunThrough[mathcommand <> " -noprompt",Unevaluated[Put[Evaluate[f@{c, d}], "c:\\rtout"]]]
(* test *)
FilePrint[outputfile]
Clear[a, c, d];
<< "c:\\rtout"
DeleteFile[outputfile]
?c
?d