2 question about arrays



--Alt-Boundary-25115.18196495
Content-type: text/plain; charset=US-ASCII
Content-transfer-encoding: 7BIT
Content-description: Mail message body

Am 8 Feb 2006 um 17:49 hat Raymond Toy geschrieben:

Thank you, Raymond!  Hi all!

> I think this is a bug in maref1 in src/trans2.lisp.  I think the
> method it's using to figure the type of AR is confused wrt to Common
> Lisp.  
> 
> If I insert a new clause for cond like so:
> 
>     (cond
>       ((typep ar 'cl:array)
>        (apply #'aref ar inds)) ;; <- new stuff
>       ((one-of-types .type. (make-array 3))     (apply #'aref ar inds))
> 
> the compiled version actually works.

I have tested a lot and Raymonds fix does it. But only for arrays defined with 
'make_array'. Other definitions ( with function 'array' ) fail with compiled code.

Volker van Nek

(%i1) load("trans2.lisp");  <--- fixed 
(%o1)   F:/Programme/Maxima-5.9.2/share/maxima/5.9.2/src/trans2.lisp
(%i2) test: make_array('fixnum,5,3)$
(%i3) for r:0 thru 4 do 
	for c:0 thru 2 do 
	  test[r,c]: random(10)$
(%i4) printArray(array,rows,cols):= block( 
	[ row ], 
	for r:0 thru rows-1 do ( 
	  row:[], 
	  for c:cols-1 thru 0 step -1 do row:cons(array[r,c],row), 
	  apply('print,row) ) )$
(%i5) printArray(test,5,3);
2 2 4 
5 4 1 
9 5 8 
3 5 5 
0 6 9 
(%o5) 				     done
(%i6) compile(printArray);
Compiling gazonk0.lsp.
End of Pass 1.  
End of Pass 2.  
OPTIMIZE levels: Safety=2, Space=3, Speed=2
Finished compiling gazonk0.lsp.
(%o6) 				 [printArray]
(%i7) printArray(test,5,3);
2 2 4 
5 4 1 
9 5 8 
3 5 5 
0 6 9 
(%o7) 				     done


--Alt-Boundary-25115.18196495
Content-type: text/html; charset=US-ASCII
Content-transfer-encoding: 7BIT
Content-description: Mail message body

<?xml  version="1.0" ?><html>
<head>
<title></title>
</head>
<body>
<div align="left"><font face="Arial"><span style="font-size:10pt">Am 8 Feb 2006 um 17:49 hat Raymond Toy geschrieben:</span></font></div>
<div align="left"><br/></div>
<div align="left"><font face="Arial"><span style="font-size:10pt">Thank you, Raymond!&#160; Hi all!</span></font></div>
<div align="left"><br/>
</div>
<div align="left"><font face="Arial" color="#7f0000"><span style="font-size:10pt">&gt; I think this is a bug in maref1 in src/trans2.lisp.&#160; I think the</span></font></div>
<div align="left"><font face="Arial" color="#7f0000"><span style="font-size:10pt">&gt; method it's using to figure the type of AR is confused wrt to Common</span></font></div>
<div align="left"><font face="Arial" color="#7f0000"><span style="font-size:10pt">&gt; Lisp.&#160; </span></font></div>
<div align="left"><font face="Arial" color="#7f0000"><span style="font-size:10pt">&gt; </span></font></div>
<div align="left"><font face="Arial" color="#7f0000"><span style="font-size:10pt">&gt; If I insert a new clause for cond like so:</span></font></div>
<div align="left"><font face="Arial" color="#7f0000"><span style="font-size:10pt">&gt; </span></font></div>
<div align="left"><font face="Arial" color="#7f0000"><span style="font-size:10pt">&gt;&#160;&#160;&#160;&#160; (cond</span></font></div>
<div align="left"><font face="Arial" color="#7f0000"><span style="font-size:10pt">&gt;&#160;&#160;&#160;&#160;&#160;&#160; ((typep ar 'cl:array)</span></font></div>
<div align="left"><font face="Arial" color="#7f0000"><span style="font-size:10pt">&gt;&#160;&#160;&#160;&#160;&#160;&#160;&#160; (apply #'aref ar inds)) ;; &lt;- new stuff</span></font></div>
<div align="left"><font face="Arial" color="#7f0000"><span style="font-size:10pt">&gt;&#160;&#160;&#160;&#160;&#160;&#160; ((one-of-types .type. (make-array 3))&#160;&#160;&#160;&#160; 
(apply #'aref ar inds))</span></font></div>
<div align="left"><font face="Arial" color="#7f0000"><span style="font-size:10pt">&gt; </span></font></div>
<div align="left"><font face="Arial" color="#7f0000"><span style="font-size:10pt">&gt; </span></font><font face="Arial" color="#7f0000"><span style="font-size:10pt">the compiled 
version actually works.</span></font></div>
<div align="left"><br/></div>
<div align="left"><font face="Arial"><span style="font-size:10pt">I have tested a lot and Raymonds fix does it. But only for arrays defined with 
'make_array'. Other definitions ( with function 'array' ) fail with compiled code.</span></font></div>
<div align="left"><br/>
</div>
<div align="left"><font face="Arial"><span style="font-size:10pt">Volker van Nek</span></font></div>
<div align="left"><br/>
</div>
<div align="left"><font face="Arial"><span style="font-size:10pt">(%i1) load(&quot;trans2.lisp&quot;);&#160; &lt;--- fixed </span></font></div>
<div align="left"><font face="Arial"><span style="font-size:10pt">(%o1)&#160;&#160; F:/Programme/Maxima-5.9.2/share/maxima/5.9.2/src/trans2.lisp</span></font></div>
<div align="left"><font face="Arial"><span style="font-size:10pt">(%i2) test: make_array('fixnum,5,3)$</span></font></div>
<div align="left"><font face="Arial"><span style="font-size:10pt">(%i3) for r:0 thru 4 do </span></font></div>
<div align="left"><font face="Arial"><span style="font-size:10pt">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;for c:0 thru 2 do </span></font></div>
<div align="left"><font face="Arial"><span style="font-size:10pt">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; test[r,c]: random(10)$</span></font></div>
<div align="left"><font face="Arial"><span style="font-size:10pt">(%i4) printArray(array,rows,cols):= block( </span></font></div>
<div align="left"><font face="Arial"><span style="font-size:10pt">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;[ row ], </span></font></div>
<div align="left"><font face="Arial"><span style="font-size:10pt">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;for r:0 thru rows-1 do ( </span></font></div>
<div align="left"><font face="Arial"><span style="font-size:10pt">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; row:[], </span></font></div>
<div align="left"><font face="Arial"><span style="font-size:10pt">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; for c:cols-1 thru 0 step -1 
do row:cons(array[r,c],row), </span></font></div>
<div align="left"><font face="Arial"><span style="font-size:10pt">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; apply('print,row) ) )$</span></font></div>
<div align="left"><font face="Arial"><span style="font-size:10pt">(%i5) printArray(test,5,3);</span></font></div>
<div align="left"><font face="Arial"><span style="font-size:10pt">2 2 4 </span></font></div>
<div align="left"><font face="Arial"><span style="font-size:10pt">5 4 1 </span></font></div>
<div align="left"><font face="Arial"><span style="font-size:10pt">9 5 8 </span></font></div>
<div align="left"><font face="Arial"><span style="font-size:10pt">3 5 5 </span></font></div>
<div align="left"><font face="Arial"><span style="font-size:10pt">0 6 9 </span></font></div>
<div align="left"><font face="Arial"><span style="font-size:10pt">(%o5) &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 
done</span></font></div>
<div align="left"><font face="Arial"><span style="font-size:10pt">(%i6) compile(printArray);</span></font></div>
<div align="left"><font face="Arial"><span style="font-size:10pt">Compiling gazonk0.lsp.</span></font></div>
<div align="left"><font face="Arial"><span style="font-size:10pt">End of Pass 1.&#160; </span></font></div>
<div align="left"><font face="Arial"><span style="font-size:10pt">End of Pass 2.&#160; </span></font></div>
<div align="left"><font face="Arial"><span style="font-size:10pt">OPTIMIZE levels: Safety=2, Space=3, Speed=2</span></font></div>
<div align="left"><font face="Arial"><span style="font-size:10pt">Finished compiling gazonk0.lsp.</span></font></div>
<div align="left"><font face="Arial"><span style="font-size:10pt">(%o6) &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 
[printArray]</span></font></div>
<div align="left"><font face="Arial"><span style="font-size:10pt">(%i7) printArray(test,5,3);</span></font></div>
<div align="left"><font face="Arial"><span style="font-size:10pt">2 2 4 </span></font></div>
<div align="left"><font face="Arial"><span style="font-size:10pt">5 4 1 </span></font></div>
<div align="left"><font face="Arial"><span style="font-size:10pt">9 5 8 </span></font></div>
<div align="left"><font face="Arial"><span style="font-size:10pt">3 5 5 </span></font></div>
<div align="left"><font face="Arial"><span style="font-size:10pt">0 6 9 </span></font></div>
<div align="left"><font face="Arial"><span style="font-size:10pt">(%o7) &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 
done</span></font></div>
<div align="left"></div>
</body>
</html>

--Alt-Boundary-25115.18196495--