Annotation of 3BSD/cmd/lisp/lib/machacks.l, revision 1.1

1.1     ! root        1: ; this file will be loaded whenever the -m switch is set for compilation.
        !             2: ; NOTE this file is loaded after the maclisp syntax has been set up!!
        !             3: (sstatus dumpcore t)
        !             4: (sstatus feature unix)
        !             5: (setsyntax '/ 2)
        !             6: 
        !             7: (def macsyma-env               ; put at the beginning of each macsyma file
        !             8:   (macro (l) `(include |//usr//staff//jkf//mac//libmax//prelud.l|)))
        !             9: 
        !            10: (def franzify
        !            11:   (macro (l) `(eval-when (compile eval)
        !            12:                         (sstatus feature franz)
        !            13:                         (sstatus feature unix)
        !            14:                         (sstatus nofeature maclisp)
        !            15:                         (sstatus nofeature its))))
        !            16: (def error
        !            17:   (lexpr (a)
        !            18:         (terpr)
        !            19:         (patom '|Error: |)
        !            20:         (do ((ll a (sub1 ll)))
        !            21:             ((zerop ll)(terpr))
        !            22:             (patom (arg ll)))))
        !            23: 
        !            24: (def fasload 
        !            25:   (nlambda (argl)
        !            26:           (fasl (concat '|//usr//staff//jkf//mac//| 
        !            27:                         (cadddr argl)          ; fourth arg
        !            28:                         '|//| 
        !            29:                         (car argl)             ; first arg
        !            30:                         '|.|
        !            31:                         (cadr argl)))))        ; second arg
        !            32: 
        !            33: (def coutput
        !            34:   (lambda (msg)
        !            35:          (print msg)   ; should go to unfasl port
        !            36:          (terpr)))
        !            37: 
        !            38: (opval 'pagelimit 5000.)
        !            39: 
        !            40: (defmacro let (binding-forms &rest body)
        !            41:          `((lambda ,(mapcar '(lambda (x) (cond ((atom x) x) (t (car x))))
        !            42:                             binding-forms)
        !            43:                    ,@body)
        !            44:            ,@(mapcar '(lambda (x) (cond ((atom x) nil)
        !            45:                                         ((null (cdr x)) nil)
        !            46:                                         (t (cadr x))))
        !            47:                      binding-forms)))
        !            48: 
        !            49: (defmacro let* (binding-forms &rest body)
        !            50:     (construct-let* (reverse binding-forms) body))
        !            51: 
        !            52: (defun construct-let* (binding-forms body)
        !            53:   (cond ((null binding-forms)
        !            54:         (cond ((= (length body) 1) (car body))
        !            55:               (t `(progn . ,body))))
        !            56:        (t (construct-let*
        !            57:            (cdr binding-forms)
        !            58:            (cond
        !            59:             ;;(let* (a b) x) --> ((lambda (a) ((lambda (b) x) nil)) nil)
        !            60:             ((atom (car binding-forms))
        !            61:              `(((lambda (,(car binding-forms)) . ,body) nil)))
        !            62:             ;;(let* (((a . b) v) x)) -->
        !            63:             ;;  ((lambda (let*val) 
        !            64:             ;;     ((lambda (a) (setq let*val (cdr let*val))
        !            65:             ;;                  ((lambda (b) x)
        !            66:             ;;                   let*val))
        !            67:             ;;      (car let*val)))
        !            68:             ;;   v)
        !            69:             ((null (atom (caar binding-forms)))
        !            70:              `(((lambda (let*val) ,(constr-let*-hack (caar binding-forms)
        !            71:                                                      body))
        !            72:                 ,(cadar binding-forms))))
        !            73:             
        !            74:             ;;(let* ((a) (b)) x) --> ((lambda (a) ((lambda (b) x) nil)) nil)
        !            75:             ((null (cdar binding-forms))
        !            76:              `(((lambda (,(caar binding-forms)) . ,body) nil)))
        !            77:             ;;(let* ((a 3) (b 4)) x) --> ((lambda (a) ((lambda (b) x) 4)) 3)
        !            78:             (t `(((lambda (,(caar binding-forms)) . ,body)
        !            79:                   ,(cadar binding-forms)))))))))
        !            80: 
        !            81: (defun constr-let*-hack (lst body)
        !            82:   (cond ((atom lst) `((lambda (,lst) ,@body) let*val))
        !            83:        ((null (cdr lst))
        !            84:           `((lambda (,(car lst)) ,@body) (car let*val)))
        !            85:        (t `((lambda (,(car lst)) (setq let*val (cdr let*val))
        !            86:                                  ,(constr-let*-hack (cdr lst)
        !            87:                                                     body))
        !            88:             (car let*val)))))
        !            89: 
        !            90: (defmacro list* (&rest forms)
        !            91:          (cond ((null forms) nil)
        !            92:                ((null (cdr forms)) (car forms))
        !            93:                (t (construct-list* forms))))
        !            94: 
        !            95: (defun construct-list* (forms)
        !            96:        (setq forms (reverse forms))
        !            97:        (do ((forms (cddr forms) (cdr forms))
        !            98:            (return-form `(cons ,(cadr forms) ,(car forms))
        !            99:                         `(cons ,(car forms) ,return-form)))
        !           100:           ((null forms) return-form)))
        !           101: 
        !           102: (defun displace (old-form new-form)
        !           103:        (cond ((atom old-form)
        !           104:              (error '|Not able to displace this form| old-form))
        !           105:             ((atom new-form)
        !           106:              (rplaca old-form 'progn)
        !           107:              (rplacd old-form (list new-form)))
        !           108:             (t (rplaca old-form (car new-form))
        !           109:                (rplacd old-form (cdr new-form)))))
        !           110: 
        !           111: (def caseq
        !           112:   (macro (form)
        !           113:           ((lambda (x)
        !           114:                    `((lambda (,x)
        !           115:                              (cond 
        !           116:                               ,@(mapcar '(lambda (ff)
        !           117:                                                  (cond ((eq (car ff) 't)
        !           118:                                                         `(t ,(cadr ff)))
        !           119:                                                        (t `((eq ,x ',(car ff))
        !           120:                                                             ,(cadr ff)))))
        !           121:                                         (cddr form))))
        !           122:                      ,(cadr form)))
        !           123:            (gensym 'Z))))
        !           124: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.