2 question about arrays
- Subject: 2 question about arrays
- From: van.Nek at gmx.net
- Date: Fri, 10 Feb 2006 21:52:01 +0100
--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!  Hi all!</span></font></div>
<div align="left"><br/>
</div>
<div align="left"><font face="Arial" color="#7f0000"><span style="font-size:10pt">> I think this is a bug in maref1 in src/trans2.lisp.  I think the</span></font></div>
<div align="left"><font face="Arial" color="#7f0000"><span style="font-size:10pt">> 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">> Lisp.  </span></font></div>
<div align="left"><font face="Arial" color="#7f0000"><span style="font-size:10pt">> </span></font></div>
<div align="left"><font face="Arial" color="#7f0000"><span style="font-size:10pt">> 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">> </span></font></div>
<div align="left"><font face="Arial" color="#7f0000"><span style="font-size:10pt">>     (cond</span></font></div>
<div align="left"><font face="Arial" color="#7f0000"><span style="font-size:10pt">>       ((typep ar 'cl:array)</span></font></div>
<div align="left"><font face="Arial" color="#7f0000"><span style="font-size:10pt">>        (apply #'aref ar inds)) ;; <- new stuff</span></font></div>
<div align="left"><font face="Arial" color="#7f0000"><span style="font-size:10pt">>       ((one-of-types .type. (make-array 3))    
(apply #'aref ar inds))</span></font></div>
<div align="left"><font face="Arial" color="#7f0000"><span style="font-size:10pt">> </span></font></div>
<div align="left"><font face="Arial" color="#7f0000"><span style="font-size:10pt">> </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("trans2.lisp");  <--- fixed </span></font></div>
<div align="left"><font face="Arial"><span style="font-size:10pt">(%o1)   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">            for c:0 thru 2 do </span></font></div>
<div align="left"><font face="Arial"><span style="font-size:10pt">              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">            [ row ], </span></font></div>
<div align="left"><font face="Arial"><span style="font-size:10pt">            for r:0 thru rows-1 do ( </span></font></div>
<div align="left"><font face="Arial"><span style="font-size:10pt">              row:[], </span></font></div>
<div align="left"><font face="Arial"><span style="font-size:10pt">              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">              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)                                           
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.  </span></font></div>
<div align="left"><font face="Arial"><span style="font-size:10pt">End of Pass 2.  </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)                                       
[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)                                           
done</span></font></div>
<div align="left"></div>
</body>
</html>
--Alt-Boundary-25115.18196495--