Search code examples
listexpressionwolfram-mathematicacallblock

How to Call an expression list in a Block of Mathematica


Here is a block function:

ublock[UU_]:=Block[{tt},U[z_]:=UU[[1]];
tt=2 U[z]+3 U'[z]+U''[z]];
UU:={z^2,z,Sin[z]};
ublock[UU]

Where tt,U[z] are temp variables, and I want to get the result:

2*z^2+6z+2

but the result is:

2z^2

why the results of U'[z] and U''[z] lost?

How to get the result I want?


Solution

  • Some evaluations help

    UU := {z^2, z, Sin[z]};
    ublock[UU_] := Evaluate@Block[{tt},
        U[z_] := Evaluate@UU[[1]];
        tt = 2 U[z] + 3 U'[z] + U''[z]];
    ublock[UU]
    

    2 + 6 z + 2 z^2

    But for more flexibility

    Clear[U, UU, ublock]
    
    ublock[UU_] := Block[{tt},
       U[z_] := 0;
       DownValues[U] = ReplacePart[DownValues[U], {1, 2} -> UU[[1]]];
       tt = 2 U[z] + 3 U'[z] + U''[z]]
    
    UU := {z^2, z, Sin[z]}
    
    ublock[UU]
    

    2 + 6 z + 2 z^2