Date: May 31, 2013 3:19 AM
Author: David Bailey
Subject: Re: Warsaw Univ. course, was Re: Work on Basic Mathematica Stephen!
On 28/05/2013 08:49, Richard Fateman wrote:

>

> I do not see any connection here. It is possible to write a linked list

> in Mathematica and still use its evaluation. e.g.

> consider using node[element,RestOfList]. Instead of [A,B,C] use

> node[A,node[B,node[C,Nil]]]. A node here is like a lisp "cons" cell.

> In fact there are other computer algebra systems written in lisp that

> use lisp lists and have similar evaluation strategies to Mathematica.

>

Yes you could, and you might find it instructive to do this, because you

would then see exactly why Stephen Wolfram chose to implement lists in a

different way!

Try using your implementation to implement some 1000 x 1000 matrix algebra!

OK - perhaps you wouldn't want to use your new list implementation for

linear algebra, but in that case, where would you want to use it? Lisp

lists are expensive to use unless the algorithm is tailored to generate

lists in reverse order, and consume them in forward order (OK you can

reverse a Lisp list, but that consumes space for a copy, but random

access is still inefficient).

Since the Lisp language was designed very early on, I would imagine its

list structure reflects the tiny memory spaces available at that time.

Garbage collection of varying sized objects is more complex and tends to

need some slack memory.

The decision to implement lists the Mathematica way, has been amply

vindicated in recent years. Because the mechanisms supplied to access

lists are not skewed towards sequential access, it has been possible to

produce packed arrays (and indeed sparse arrays) that work as drop in

replacements for the equivalent list structures - with enormous

performance gains.

Mathematica also gains from the decision to make lists mutable - again

this simplifies the design of algorithms and increases performance.

Clearly Mathematica lists also score in they must help internally to

avoid repeated evaluation. Clearly Mathematica must store some

information in the head of every object to keep track of objects that

need reevaluation, and you wouldn't want each list node to be bloated

out in that way.

Yes you could implement Lisp-style lists in Mathematica, and with a bit

more effort, you could also supply them with a nice syntax for

input/output, so try it and see how many people find them useful!

David Bailey

http://www.dbaileyconsultancy.co.uk