上的可能的問題評估Mathematica的文檔保持內的一個水平說:評估超越數學
評估僅在第一 水平的作品,直接在保持功能
爲什麼數學裏面有這個限制嗎?所以,如果我有一個以上的水平表達藉此簡化的例子:
控股[加[加[2,2],2]]]
現在假設我希望看到的答案是什麼第二個Plus,沒有評估任何低於它的級別。我已經嘗試不同的東西,如:
In[290]:= Hold[Plus[Evaluate[Plus[2, 2]], 2]]
Out[290]= Hold[Evaluate[2+2]+2]
In[287]:= Hold[Plus[ReleaseHold[Hold[Plus[2, 2]]], 2]]
Out[287]= Hold[ReleaseHold[Hold[2+2]]+2]
第一保持使一切不計算在超越在這種情況下的第一級。 的目標是從最內嵌套函數到外一個使用連續保持,ReleaseHold在每個階段,以控制表達的評價和評估函數來實現這一點。我知道我可以使用跟蹤看到超越一個發生的一切都在表達但那是不同的,複雜的,有時較長表達式讀取。
這似乎是唯一的辦法就是提取和完全拆除的表達成使用提取物,部分或等級名單;評估我想要的表達的一部分;然後重建並重新映射每個階段的表達式。有沒有其他方法或功能可以實現我可以考慮的?
編輯:這可能是一個更好的例子來看看釋放第一保持的方法。與表達:
Hold[Plus[Plus[2, Plus[2,2]], 2]]]
如果鬆開第一保持並將保持在在第三再加上表達更高的水平,看起來像這樣:
in = Plus[Plus[2, Hold[Plus[2,2]]], 2]]]
out = Hold[2+2]+4
你發現數學會當你真的想要等待時,在後臺評估較低的級別。
相關問題:http://stackoverflow.com/questions/1616592/hold-defer-etc – dreeves 2010-06-29 17:25:12