|
|
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:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.