Re: Compile
- To: mathgroup at smc.vnet.net
 - Subject: [mg45349] Re: Compile
 - From: Bill Rowe <readnewsciv at earthlink.net>
 - Date: Fri, 2 Jan 2004 04:23:40 -0500 (EST)
 - Sender: owner-wri-mathgroup at wolfram.com
 
On 1/1/04 at 5:54 AM, dontsendhere@. (Maxim) wrote:
> If you tried to actually do some testing --
I did but did not try such odd code
 
> Module[{y := If[Print[x];NumericQ[x], x, 1]},
>   Plot[x y, {x, 0, 1}, Compiled -> True]
> ]
The documentation specifically states only inline functions get compiled not user defined functions. So when you write code such as the above, you should expect things to be a bit unpredictable.
> you would notice that y is evaluated for each step Plot takes and it prints symbol x.
No, I don't think that is what is happening. I believe y is evaluated once to 1 since x is not numeric at the time y is evaluated. But since you have wrapped x in a Print statement what is compiled is a literal Print[x] followed by x which causes the symbol x to be printed each time the function x is sampled to be plotted.
If y were evaluated at each step, I would expect numeric values to be printed instead of the symbol x and a parabola which is exactly what you get if you choose Compiled->False in the above code.
 
> And of course, Compile doesn't evaluate its second argument -- do you really think that to execute 
> Compile[{}, Print[x]] Print[x] should be evaluated?
I don't know why anyone would write code like this, but if they did why should they expect Print[x] not to be evaluated in this example?
--
To reply via email subtract one hundred and four