4

here is the silly question of mine,

if mathematica takes 3 seconds to evaluate the function f[3] then I plug the this value f[3] into a new function g[f[3],f[3]], Let's ignore the evaluation time for the new function g, how long does it take for g[f[3],f[3]], 3 seconds or 6 seconds?

if it is 6 seconds, how can I make mathematica temporarily to remember the value of f[3]

thanks

3c.
  • 669
  • 1
  • 7
  • 13

3 Answers3

8

Use With to define temporary constants.

With[{a=f[3]}, g[a,a]]

Memoization is also worth mentioning but keep in mind that once a value is remembered, it won't be forgotten (until to explcitly clear it). I.e. when you use memoization, Mathematica will remember permanently (not temporarily).

Szabolcs
  • 234,956
  • 30
  • 623
  • 1,263
7

With keeps the code clear for longer cases but sometimes I'd do:

g[#,#] & @ f[3]
Kuba
  • 136,707
  • 13
  • 279
  • 740
1
Clear["Global`*"]
ClearSystemCache[];
$RecursionLimit = Infinity;
fibonacci[1] = 1; fibonacci[2] = 1;
fibonacci[i_] := fibonacci[i] = fibonacci[i - 1] + fibonacci[i - 2];
fibonacci[20000]; // AbsoluteTiming
fibonacci[20000]; // AbsoluteTiming
(*{0.135008, Null}*)
(*{0., Null}*)
Apple
  • 3,663
  • 16
  • 25