2.8.17 高级专题:低级别的输出规则表达式和单元间转化的低级函数 MakeBoxes 产生一个不计算其输入的单元
Out[1]= |  |
MakeExpression 解释单元但用 HoldComlete 去防止所得的表达式被计算
Out[2]= |  |
Mathematica 中有许多规则产生输出和解释输入. 在 StandardForm 中,这些规则是一致的,可允许输入和输出交换使用. 一般不需要修改 这些规则,因为 Mathematica 对没有特定含义的运算符已经定义了输出和输入规则. 所以当需要进行更一般地相加时,就可以使用运算符 , Mathematica 已经对它设置了输入和输出规则. 使用运算符 的输出
Out[3]= |  |
Mathematica 理解输入中的  Out[4]//FullForm=
 |
通过定义Format[expr] 可以改变表达式的输出形式,但要认识到你所定义的输出 形式在输入时无法保证被 Mathematica 正确地解释.需要时可以在Mathematica 中 定义用输入和输出的基本规则,这可以通过定义 MakeBoxes 和 MakeExpression 来实现. 但一定要非常仔细地给出这类定义,否则 就会出现不一致的结果. 定义 gplus 目标如何按 StandardForm 输出 现在 gplus 用带下标的 输出
Out[6]= |  |
但 Mathematica 就无法解释这个输入
这里告诉 Mathematica 将带下标的 解释成 FullForm 输入的一个指定项 现在带下标的 被解释成 gplus Out[8]//FullForm=
 |
定义 MakeBoxes 时要知道这是对 Format 相当低级的一个定义. 一个重要的区别是 MakeBoxes 不计算它的变量,所以可以定义对表达式格式化的规则,而不涉及表达式 的计算.另外,Format 自动调用在执行它时所产生的规则,而 MakeBoxes 并不这样.这意味着定义了MakeBoxes 后,在需要对子表达式格式 化时必须重新明确调用 MakeBoxes. Mathematica 输入中所进行的运算
|