[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Reply to DESTRUCTURING considered harmfull.
- To: DILL at MIT-MC
- Subject: Reply to DESTRUCTURING considered harmfull.
- From: George J. Carrette <GJC at MIT-MC>
- Date: Wed ,10 Jun 81 16:54:00 EDT
- Cc: LISP-FORUM at MIT-MC
The only place I have seen destructuring used is in the processing
S-EXPRESSION's which have been produced by a READER or PARSER. The
three most common applications being in lisp macros, various
lisp-style assemblers, and the alpha-conversion (first-pass) of lisp
compilers.
For these purely syntactical uses the SYNTACTIC destructuring
of DEFMACRO and [maclisp] LET is great, made-to-order one might say.
The other kind of destructuring is SEMANTIC, e.g. in "(SETF <FOO> X)"
one must look at "<FOO>" as a lisp program, and know about
order-of-evaluation and other considerations. [Although the LispM
design decision was to treat SETF purely syntactically for simplicity.]
A problem with the semantic destructuring is that one can express
arbitrary pattern-matching in it, and that is known to loose.
* Let us look at the syntactic destructuring when one has a read
syntax for structures. *
(defstruct foo a b c)
(make-foo a 1 b 2 c 3) => #{FOO A: 1 B: 2 C: 3} ; print SYNTAX
Therefore it is reasonable to assume that
(DSETQ #{FOO A: X B: Y} Z) ; syntactic destructuring SETQ
will expand into
(SETQ X (FOO-A Z)
Y (FOO-B Z)).
So you see that it is possible to get the destructured abstraction
you spoke of within the purely syntactic realm of maclisp DSETQ and LET.
Therefore fear not.
-gjc