如何在不保存辅助定义的情况下保存与Mathematica中的符号关联的[]定义?

Sim*_*mon 4 wolfram-mathematica save

内置的Mathematica命令Save[file, symbol]用于FullDefinition[]查找定义symbol和所有子定义.

例如,命令

a:=b
c:=2a+b
Save[ToFileName[NotebookDirectory[],"test.dat"],c]
Run Code Online (Sandbox Code Playgroud)

生成包含的文件test.dat

c := 2*a + b
a := b
Run Code Online (Sandbox Code Playgroud)

我有一个计划了很多美化的MakeBoxes,我做的类型定义希望当我保存[]的许多独立的结果进行保存.

就上面的简单示例而言,我不希望将a := b定义保存到文件中.有谁知道一个简洁的方法来实现这一目标?

Jan*_*nus 9

根据文档,Save使用FullDefinition时你想要它使用它Definition.使用Block我们可以覆盖任何符号的全局定义,特别是取代FullDefinitionDefinition在运行Save:

Block[{FullDefinition},
  FullDefinition = Definition;
  Save[filename, c]
  ];
FilePrint[filename]
DeleteFile[filename]
Run Code Online (Sandbox Code Playgroud)

神奇的作品:

c := 2*a + b
Run Code Online (Sandbox Code Playgroud)

编辑.用正确的属性包装:

SetAttributes[truncatedSave, HoldRest]
truncatedSave[filename_, args__] := Block[{FullDefinition},
   FullDefinition = Definition;
   Save[filename, args]];
Run Code Online (Sandbox Code Playgroud)