;;; Hey, Zwei, this file contains -*- Mode: Lisp; Package: User; Base: 10. ; -*- ;;;; Version of LLOGO;DEFINE for the Lisp machine. (SSTATUS FEATURE DEFINE) (SETQ NO-VALUE '?) (EVAL-WHEN (EVAL LOAD COMPILE) (DEFVAR GENSYM (GENSYM)) (DEFVAR INSIDE-OPEN-BRACKET? NIL) (DEFUN OPEN-BRACKET-MACRO NIL (COND ((EVAL (READ)) NIL) (T (DO ((STUFF (READ) (READ)) (INSIDE-OPEN-BRACKET? T)) ((EQ STUFF GENSYM))) NIL)) NIL) (SETSYNTAX 91. 'SPLICING 'OPEN-BRACKET-MACRO) (DEFUN CLOSE-BRACKET-MACRO () (COND (INSIDE-OPEN-BRACKET? (LIST GENSYM)) (NIL))) (SETSYNTAX 93. 'SPLICING 'CLOSE-BRACKET-MACRO)) (DEFMACRO INCREMENT (VARIABLE &OPTIONAL (BY 1.)) `(SETF ,VARIABLE (+ ,VARIABLE ,BY))) (DEFMACRO DECREMENT (VARIABLE &OPTIONAL (BY 1.)) `(SETF ,VARIABLE (- ,VARIABLE ,BY))) (DEFMACRO BITWISE-AND (&REST ARGS) `(BOOLE 1. ,@ARGS)) (DEFMACRO BITWISE-OR (&REST ARGS) `(BOOLE 7. ,@ARGS)) (DEFMACRO BITWISE-NOT (&REST ARGS) `(BOOLE 6. -1. ,@ARGS)) (DEFMACRO BITWISE-XOR (&REST ARGS) `(BOOLE 6. ,@ARGS)) (DEFMACRO BITWISE-ANDC (&REST ARGS) `(BOOLE 2. ,@ARGS)) (DEFMACRO REPEAT (REPEAT-ITERATIONS . REPEAT-BODY) `(DO ((REPEAT-COUNT 1. (1+ REPEAT-COUNT))) ((> REPEAT-COUNT ,REPEAT-ITERATIONS)) . ,REPEAT-BODY)) (DEFMACRO CCONS (&REST ARGS) `(LIST* ,@ARGS)) (DEFMACRO DEFINE (NAME . DEFINITION) (LET ((CLAUSE-NAMES '(ABB SYN))) (LET ((CLAUSES (DO ((CLAUSES NIL)) ((NOT (AND (LISTP (CAR DEFINITION)) (MEMQ (CAAR DEFINITION) CLAUSE-NAMES))) CLAUSES) (PUSH (CAR DEFINITION) CLAUSES) (POP DEFINITION)))) `(PROGN 'COMPILE ,@ (COND ((ASSQ 'SYN CLAUSES) (MAPCAR '(LAMBDA (ABB) `(FSET ',NAME ',ABB)) (CDR (ASSQ 'SYN CLAUSES)))) (`((DEFUN ,NAME ,@ DEFINITION)))) ,@ (COND ((ASSQ 'ABB CLAUSES) (MAPCAR '(LAMBDA (ABB) `(FSET ',ABB ',NAME)) (CDR (ASSQ 'ABB CLAUSES)))))))))