home *** CD-ROM | disk | FTP | other *** search
- Hard to believe but it was less than two and a half years ago that
- someone was having trouble using Franz arrays...
-
- Date: 17 Jul 1981 17:06:22-PDT
- From: CSVAX.jkf at Berkeley
- To: FININ@WHARTON-10
- cc: franz-friends at MIT-MC
- Subject: Re: ... the maclisp-style array package.
- In-reply-to: Your message of 17 Jul 1981 1347-PDT (Friday).
-
- From: FININ@WHARTON-10
- Subject: ... the maclisp-style array package.
-
- ...
- [3] We've been having problems with the MacLisp compatable array
- package - it doesn't work! Does anyone have a debugged version?
-
- Can you be more specific? We use it in Vax Macsyma without any problems.
- Personally I feel that Maclisp arrays were invented by a madman and no new
- code should be written using them.
-
- -- john foderaro
-
- Well, I used the Maclisp array package because I didn't want to waste
- time writing my own. Instead I spent hours looking for the bug in this
- code:
-
- -> (let ((factorial (*array () () 100.)))
- (store (factorial 0) 1)
- (do ((i 1 (1+ i)))
- ((= i 100.))
- (store (factorial i) (times i (factorial (1- i)))))
- (factorial 10.))
- 285656
-
- To make a long story short, this lossage is because the second argument
- to *array being nil tells the garbage collector not to scan the
- array. The factorial of ten gets tossed in the bit bucket, where it
- unfortunately looks like a fixnum. To fix the example, change the
- first line of the example to
-
- -> (let ((factorial (*array () t 100.)))
-
- To save someone else from excruciatingly wrong answers, change the
- documentation in Section 2.
-
- (*array 's_name 's_type 'x_dim1 ... 'x_dimn)
- (array s_name s_type x_dim1 ... x_dimn)
-
- WHERE: s_type may be one of t, nil, fixnum, flonum,
- fixnum-block and flonum-block.
- ...
- < In FRANZ LISP arrays of type t, nil, fix-
- < num and flonum are equivalent and the elements of
- < these arrays can be any type of lisp object.
- ---
- > In FRANZ LISP arrays of type t, fixnum,
- > and flonum are equivalent and the elements of
- > these arrays can be any type of lisp object.
- > Type nil arrays may also contain any type of lisp
- > object, but they are not marked by the garbage
- > collector (see 9.2.2) and can lose data if used
- > incorrectly.
- Fixnum-block and flonum-block arrays are res-
- tricted to fixnums and flonums respectively and
- are used mainly to communicate with foreign func-
- tions (see 8.4).
-
- Dan
-
-