[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
defun syntax / AutoLisp emu
- To: "Stephen Ervin" <Stephen_Ervin@venus.gsd.harvard.edu>
- Subject: defun syntax / AutoLisp emu
- From: straz@cambridge.apple.com (Steve Strassmann)
- Date: Wed, 25 Aug 1993 16:45:20 -0400
- Cc: info-mcl
>Date: 25 Aug 1993 16:24:13 U
>From: "Stephen Ervin" <Stephen_Ervin@venus.gsd.harvard.edu>
>Subject: defun syntax / AutoLisp emu
>To: "macl info" <info-mcl@cambridge.apple.com>
>
>REGARDING defun syntax / AutoLisp emulator
>dear lispers;
>In an effort to create an MCL-based environment for programming graphics (not
>graphical programming yet), we're building an 'AutoLisp' emulator. (AutoLisp
>is the lisp subset/variant built into AutoCad, from AutoDesk, a popular CAD
>system now fully fledged on macs)
>A major annoyance/stumbling block is AutoLisp's idiosyncratic syntax for local
>variable names; instead of using 'let or '&aux in the lambda list, they use
>the syntax:
>(defun foo (a b c / x y z) ...)
>where the / is synonymous with &aux, declaring x y z to be local vars.
>
>Is there any hope of hacking defun so this would become acceptable to MCL? (In
>the hopes of making complete transparency / portability between MCL and
>AutoLisp code... It's hard enough to teach the semantics of scoping, without
>having syntax to screw it up! )
>
>Any suggestions would be appreciated. Thanks in advance,
>
>Stephen M Ervin
>servin@gsd.harvard.edu
>
You should probably define a macro to use instead of defun,
which does the substitutions you want, e.g.:
? (defmacro defun-auto (arglist &body body)
`(defun ,(subst '&aux `/ arglist) ,@body))
defun-auto
? (macroexpand-1 '(defun-auto (a b c / x y z) body1 body2))
(defun (a b c &aux x y z) body1 body2)
t
You can of course call this macro DEFUN if you use it in a
package which doesn't use the COMMON-LISP package, and you manually
import just the functions you want to emulate AutoLisp.