Plus pratique, la différence entre Block
et Module
peut être vu ici:
Module[{x}, x]
Block[{x}, x]
(*
-> x$1979
x
*)
Donc, si vous souhaitez renvoyer par exemple x
, vous pouvez utiliser Block
. Par exemple,
Plot[D[Sin[x], x], {x, 0, 10}]
ne fonctionne pas; pour le faire fonctionner, on pourrait utiliser
Plot[Block[{x}, D[Sin[x], x]], {x, 0, 10}]
(bien sûr, ce n'est pas l'idéal, c'est simplement un exemple).
Une autre utilisation est quelque chose comme Block[{$RecursionLimit = 1000},...]
, ce qui change temporairement $RecursionLimit
(Module
n'aurait pas travaillé comme il renomme $RecursionLimit
).
On peut aussi utiliser d' Block
pour bloquer l'évaluation de quelque chose, par exemple
Block[{Sin}, Sin[.5]] // Trace
(*
-> {Block[{Sin},Sin[0.5]],Sin[0.5],0.479426}
*)
c'est à dire, il retourne Sin[0.5]
qui est seulement évaluée après l' Block
a fini de s'exécuter. C'est parce qu' Sin
à l'intérieur de l' Block
est juste un symbole, plutôt que la fonction sinus. Vous pourriez même faire quelque chose comme
Block[{Sin = Cos[#/4] &}, Sin[Pi]]
(*
-> 1/Sqrt[2]
*)
(utiliser Trace
pour voir comment il fonctionne). Ainsi, vous pouvez utiliser Block
localement redéfinir les fonctions intégrées, trop:
Block[{Plus = Times}, 3 + 2]
(*
-> 6
*)