2) Even in primitive versions, "records" containing more than 2 objects
appears to be about the most common data structure which people
use. I programmed my thesis in Lisp, but have done mostly Pascal
programming for the last 3 years or so. Thus I have a fair claim to
know both styles of programming. I can only say that I do not recall
any bugs due to attempting to refer to data structures incorrectly,
but I know of a number of cases where I wanted to bypass Pascal's
type checking and found it hard (though possible, if you know the compiler
as well as I do) to do. Most people use macros rather than functions,
since this allows them to be compiled in line.
3) I normally use TVEDIT to prepare pictures of the sort you are
talking about. It allows you to move the cursor to any spot on the
screen, even if that spot (because of end of line, or tab) did not
exist before. Furthermore, it displays every character (even the
control characters which we use for line drawing on our Xerox 9700)
as taking one space.
-------
If I'm doing a "boxes and arrows" picture, I want to be able to type
a LISP form in standard READ format and have an approximation of the
picture produced automatically. Then I want simple commands to allow
me to modify the picture, e.g. equivalents of RPLACA and RPLACD. Of
course, the package can only perform an approximation, since based on
((X Y) X Y)
we don't know if the (X Y) list is shared. What I most certainly
don't want to have to do is type every character in the picture or
worry about what characters to use for line drawing.
Unfortunately, the "box and arrow" editor, though not hard to write
(especially if written in lisp) is only one of many special-purpose
picture editors imaginable. What I really want, then, is a general
purpose picture editor that is easily customized for such special
purpose tasks. But I also want to have a picture editor that is easy
for the novice to use, i.e. has a command set that seems "natural" in
some sense. I don't know what that command set would look like.
-------
Other people have already replied to your message about data
structures in lisp, but no one has made it clear that in the
mit-origin dialects doing what you want is probably as simple as
saying
(defstruct (node)
left-child
parent
right-child)
and later
(parent n) or (right-child n) or
(setf (left-child n) x)