Subject: Re: Converting an array into a list
From: Erik Naggum <erik@naggum.no>
Date: 1998/10/07
Newsgroups: comp.lang.lisp
Message-ID: <3116780426375122@naggum.no>

* Amit Kumar <amit@pollux.usc.edu>
| I'm a newbie, first of all, so please treat the question as such.  Is
| there a trivial way of converting a matrix into a list? ie, if we have a
| matrix #2A((a b) (c d)), is there a simple way of getting the list ((a b)
| (c d)), short of scanning the entire matrix element by element and
| writing to a list?

  well, the Lisp printer already does this, so we could be clever and do

(read-from-string (write-to-string <matrix>) t t :start 3)

  3 is OK as a constant because: (1) you're not going to use it on
  one-dimensional arrays, anyway, because (coerce <vector> 'list) already
  does that, (2) you're not going to use it on matrices of more than 9
  dimensions, and (3) you know full well this is a clever hack to get past
  a roadblock on your way to a better world, not a lasting solution.

  also note that this is not efficient in _any_ way.  to get an efficient
  and lasting solution, you need to traverse the matrix and cons up your
  own lists of elements.  (tip of the day: start from the far end -- you'll
  avoid the need to reverse the lists you're building.)

#:Erik