上的可能的问题评估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