功能体评估困惑

时间:2011-04-11 02:45:41

标签: wolfram-mathematica

我对Function的以下行为感到困惑:

In[1]:= InlineCellInMessage=Function[expr,DisplayForm[Cell[BoxData[MakeBoxes[expr,StandardForm]],"Input"]],{HoldAllComplete}]
Out[1]= Function[expr,MakeBoxes[expr,StandardForm]]

我希望在输出中的Function内看到未评估的代码,如下例所示:

In[2]:= InlineCellInMessage=Function[x,x+1+1]
Out[2]= Function[x,x+1+1]

但是我在输出中得到了内联单元格。为什么会这样?

1 个答案:

答案 0 :(得分:3)

这是FrontEnd渲染的结果。考虑:

InlineCellInMessage = 
  Function[expr,DisplayForm[Cell[BoxData[MakeBoxes[expr,StandardForm]],"Input"]],{HoldAllComplete}]

InlineCellInMessage // InputForm

输出:

InputForm[Function[expr, DisplayForm[Cell[BoxData[MakeBoxes[expr, StandardForm]], "Input"]], {HoldAll.Complete}]]

此外,在此用法中,参数HoldAllComplete会影响函数的未来输入,而不会影响函数本身的创建。如果您希望Function本身拥有HoldAllComplete,则需要:

SetAttributes[Function, HoldAllComplete]