<div dir="ltr"><div>In SBCL, I'm finding some generic arithmetic is returning an error.  The trace is below.  Basically, when I try to (antik:* x y), and x and y are sequences, it fails if x is of type (simple-array fixnum) and y is of type (simple-array double-float).<br><br>The problem appears to be in generic.lisp, where *i is defined to fall through to (map (type-of x) #'*i x y), thus assuming that the type produced by the product is the same as the type of the first argument.  In general, that won't be the case because of the numerical tower, floating point contagion, etc.  Even operating on two fixnums can create a bignum, so operands of type (simple-array fixnum) can need to create an array of type (simple-array integer).<br><br></div>Here's the trace:<br><div><br>~$ sbcl<br>This is SBCL 1.1.14.debian, an implementation of ANSI Common Lisp.<br>More information about SBCL is available at <<a href="http://www.sbcl.org/">http://www.sbcl.org/</a>>.<br><br>SBCL is free software, provided as is, with absolutely no warranty.<br>It is mostly in the public domain; some portions are provided under<br>BSD-style licenses.  See the CREDITS and COPYING files in the<br>distribution for more information.<br>* (defvar x1 (make-array 3 :element-type 'double-float :initial-contents '(1d0 2d0 3d0)))<br><br>X1<br>* (defvar i1 (make-array 3 :element-type 'fixum :initial-contents '(1 2 3)))<br><br>I1<br>* x1<br><br>#(1.0d0 2.0d0 3.0d0)<br>* i1<br><br>#(1 2 3)<br>* (type-of x1)<br><br>(SIMPLE-ARRAY DOUBLE-FLOAT (3))<br>* (type-of i1)<br><br>(SIMPLE-VECTOR 3)<br>* (ql:quickload "antik")<br>To load "antik":<br>  Load 1 ASDF system:<br>    antik<br>; Loading "antik"<br>.........<br>("antik")<br>* (antik:* i1 x1)<br><br>#(1.0 4.0 9.0)<br>* (antik:* x1 i1)<br><br>#(1.0 4.0 9.0)<br>* (antik:* x1 (coerce i1 '(vector fixnum)))<br><br>#(1.0 4.0 9.0)<br>* (antik:* (coerce i1 '(vector fixnum)) x1 )<br><br>debugger invoked on a TYPE-ERROR in thread<br>#<THREAD "main thread" RUNNING {1002A8AF83}>:<br>  The value 1.0d0 is not of type FIXNUM.<br><br>Type HELP for debugger help, or (SB-EXT:EXIT) to exit from SBCL.<br><br>restarts (invokable by number or by possibly-abbreviated name):<br>  0: [ABORT] Exit debugger, returning to top level.<br><br>(SB-IMPL::OPTIMIZED-DATA-VECTOR-SET #<unavailable argument> #<unavailable argument> #<unavailable argument>)<br>0] backtrace<br><br>Backtrace for: #<SB-THREAD:THREAD "main thread" RUNNING {1002A8AF83}><br>0: (SB-IMPL::OPTIMIZED-DATA-VECTOR-SET #<unavailable argument> #<unavailable argument> #<unavailable argument>)<br>1: ((FLET SB-IMPL::F :IN SB-IMPL::%MAP-TO-VECTOR) 1 1.0d0)<br>2: (SB-IMPL::%MAP-FOR-EFFECT #<CLOSURE (FLET SB-IMPL::F :IN SB-IMPL::%MAP-TO-VECTOR) {7FFFF6BBF73B}> (#(1 2 3) #(1.0d0 2.0d0 3.0d0)))<br>3: (SB-IMPL::%MAP-TO-VECTOR (SIMPLE-ARRAY FIXNUM (3)) #<STANDARD-GENERIC-FUNCTION ANTIK::*I (10)> (#(1 2 3) #(1.0d0 2.0d0 3.0d0)))<br>4: (REDUCE #<STANDARD-GENERIC-FUNCTION ANTIK::*I (10)> (#(1 2 3) #(1.0d0 2.0d0 3.0d0)))<br>5: (SB-INT:SIMPLE-EVAL-IN-LEXENV (ANTIK:* (COERCE I1 (QUOTE (VECTOR FIXNUM))) X1) #<NULL-LEXENV>)<br>6: (EVAL (ANTIK:* (COERCE I1 (QUOTE (VECTOR FIXNUM))) X1))<br>7: (INTERACTIVE-EVAL (ANTIK:* (COERCE I1 (QUOTE (VECTOR FIXNUM))) X1) :EVAL NIL)<br>8: (SB-IMPL::REPL-FUN NIL)<br>9: ((LAMBDA NIL :IN SB-IMPL::TOPLEVEL-REPL))<br>10: (SB-IMPL::%WITH-REBOUND-IO-SYNTAX #<CLOSURE (LAMBDA NIL :IN SB-IMPL::TOPLEVEL-REPL) {1003C615BB}>)<br>11: (SB-IMPL::TOPLEVEL-REPL NIL)<br>12: (SB-IMPL::TOPLEVEL-INIT)<br>13: ((FLET #:WITHOUT-INTERRUPTS-BODY-54 :IN SAVE-LISP-AND-DIE))<br>14: ((LABELS SB-IMPL::RESTART-LISP :IN SAVE-LISP-AND-DIE))<br><br>0] <br><br clear="all"><div><br>-- <br><div class="gmail_signature">Harvey J. Stein<br><a href="mailto:hjstein@gmail.com" target="_blank">hjstein@gmail.com</a><br><a href="http://www.linkedin.com/in/harveyjstein" target="_blank">http://www.linkedin.com/in/harveyjstein</a><br>Selected papers and presentations available at: <a href="http://ssrn.com/author=732372" target="_blank">http://ssrn.com/author=732372</a><br></div>
</div></div></div>