gpt4 book ai didi

wolfram-mathematica - Mathematica 模块与 With 或 Block - 使用指南、经验法则?

转载 作者:行者123 更新时间:2023-12-03 07:37:34 27 4
gpt4 key购买 nike

Leonid 在他的书的第四章中写道:“...Module、Block 和 With。这些结构在 Mathematica Book 和 Mathematica Help 中有详细解释,所以我在这里简单介绍一下它们。... ”

根据我读到的(能够找到的)我仍然处于黑暗之中。对于打包函数,我(简单地)使用模块,因为它可以工作并且我知道其构造。但这可能不是最好的选择。我并不完全清楚(从文档中)何时、何地或为何使用 With (或 Block)。

问题。是否有关于何时使用 Module、With 或 Block(对于包中的函数)的经验法则/指南?与 Module 相比有限制吗?文档说 With 更快。我希望能够捍卫我对模块(或其他构造)的=选择=。

最佳答案

BlockModule 之间更实际的区别可以在这里看到:

Module[{x}, x]
Block[{x}, x]
(*
-> x$1979
x
*)

因此,如果您希望返回例如x,则可以使用Block。例如,

Plot[D[Sin[x], x], {x, 0, 10}]

不起作用;为了使其工作,可以使用

Plot[Block[{x}, D[Sin[x], x]], {x, 0, 10}]

(当然这并不理想,这只是一个例子)。

另一种用法类似于 Block[{$RecursionLimit = 1000},...],它会暂时更改 $RecursionLimit (Module不会起作用,因为它重命名了 $RecursionLimit)。

还可以使用Block来阻止对某些内容的评估,例如

Block[{Sin}, Sin[.5]] // Trace
(*
-> {Block[{Sin},Sin[0.5]],Sin[0.5],0.479426}
*)

即,它返回 Sin[0.5],仅在 Block 完成执行后才进行计算。这是因为Block内的Sin只是一个符号,而不是正弦函数。你甚至可以做类似的事情

Block[{Sin = Cos[#/4] &}, Sin[Pi]]
(*
-> 1/Sqrt[2]
*)

(使用Trace来查看它是如何工作的)。因此,您也可以使用 Block 在本地重新定义内置函数:

Block[{Plus = Times}, 3 + 2]
(*
-> 6
*)

关于wolfram-mathematica - Mathematica 模块与 With 或 Block - 使用指南、经验法则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6661393/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com