Re: On the built-in function "Compile"
- To: mathgroup at smc.vnet.net
- Subject: [mg90220] Re: On the built-in function "Compile"
- From: Jean-Marc Gulliet <jeanmarc.gulliet at gmail.com>
- Date: Wed, 2 Jul 2008 05:33:19 -0400 (EDT)
- Organization: The Open University, Milton Keynes, UK
- References: <g4d2ui$eqv$1@smc.vnet.net>
shingo wrote: <snip> > However, in the case of nested list, it doesnt. > > In[2]:= > testB = Compile[{{i, _Integer}}, > Outer[{#1, #2} &, Range[1, i, 1], Range[1, i, 1]]] > > Out[2]:= > Compile::cpapot: Compilation of \ > Outer[{#1,#2}&,Range[1,i,1],Range[1,i,1]] is not supported for the \ > function argument {#1,#2}&. The only function arguments supported are > \ > Times, Plus, or List. Evaluation will use the uncompiled function. >> > CompiledFunction[{i},Outer[{#1,#2}&,Range[1,i,1],Range[1,i,1]],- > CompiledCode-] This has *nothing* to do with nested lists. The message you get tells you that Compile will compile the function Outer[] if and only if the first argument of Outer[] is either one of the functions Times, Plus, or List. Nothing else will be accepted. In[1]:= testB = Compile[{{i, _Integer}}, Outer[Times, Range[1, i, 1], Range[1, i, 1]]]; testB[3] Out[2]= {{1, 2, 3}, {2, 4, 6}, {3, 6, 9}} In[3]:= testB = Compile[{{i, _Integer}}, Outer[Plus, Range[1, i, 1], Range[1, i, 1]]]; testB[3] Out[4]= {{2, 3, 4}, {3, 4, 5}, {4, 5, 6}} In[5]:= testB = Compile[{{i, _Integer}}, Outer[List, Range[1, i, 1], Range[1, i, 1]]]; testB[3] Out[6]= {{{1, 1}, {1, 2}, {1, 3}}, {{2, 1}, {2, 2}, {2, 3}}, {{3, 1}, {3, 2}, {3, 3}}} Regards, -- Jean-Marc