Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Puzzled by Function body evaluation

I am puzzled by the following behavior of Function:

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

I expected to see unevaluated code inside Function in the output as in the following case:

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

But I get the inline cell inside output. Why does this happen?

like image 596
Alexey Popkov Avatar asked Nov 28 '25 01:11

Alexey Popkov


1 Answers

This is the result of FrontEnd rendering. Consider:

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

InlineCellInMessage // InputForm

Output:

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

Also, in this use the parameter HoldAllComplete affects future input to the function, not the creation of the function itself. If you want Function itself to have HoldAllComplete you need:

SetAttributes[Function, HoldAllComplete]
like image 92
Mr.Wizard Avatar answered Dec 01 '25 14:12

Mr.Wizard