Newsgroups: comp.lang.scheme Path: utzoo!utgpu!news-server.csri.toronto.edu!rpi!zaphod.mps.ohio-state.edu!think.com!mintaka!bloom-beacon!dont-send-mail-to-path-lines From: greg@vis.UUCP Subject: Fixes for extend-syntax for mit-scheme 7.1 Message-ID: <9104150751.AA14915@ifsrad> Sender: daemon@athena.mit.edu (Mr Background) Organization: The Internet Date: 15 Apr 91 07:51:12 GMT Lines: 128 I assume that the mit-extend-syntax.ss included in syntax.sha in the repository works in earlier versions of mit-scheme. Here are the changes I made to get it to work with 7.1 (context diff): *** mit-extend-syntax.ss Mon Apr 15 00:45:16 1991 --- syntax.sha/mit-extend-syntax.ss Sun Apr 14 00:02:42 1991 *************** *** 6,29 **** ;;; The following functions were added: ;;; gensym, duplicate-symbols, box, unbox, set-box!. - ;;; mit-extend-syntax.ss - ;;; 15 April, 1991 - ;;; Discovered that mit-extend-syntax.ss from the repository - ;;; (inside of syntax.sha) does not work in mit-scheme 7.1(beta) - ;;; Here were the problems: - ;;; (1) The original relied on the return values of failed unless and when - ;;; macros which were implemented on top of no-alternative if which - ;;; returns no-value. Having '() be the alternative seems to fix it. - ;;; (2) The original used some keywords as variable names: cond, access - ;;; J. Greg Davidson, Institute for Software Research and Development, - ;;; vis!greg@ucsd.edu - (define gensym generate-uninterned-symbol) ! (define-macro (unless condition . e1 ) `(if ,condition '() (begin ,@e1))) ! (define-macro (when condition . e1) `(if ,condition (begin ,@e1) '())) (define-macro (kerror msg-line . args) `(begin --- 6,17 ---- ;;; The following functions were added: ;;; gensym, duplicate-symbols, box, unbox, set-box!. (define gensym generate-uninterned-symbol) ! (define-macro (unless cond . e1 ) `(if (not ,cond) (begin ,@e1))) ! (define-macro (when cond . e1) `(if ,cond (begin ,@e1) )) (define-macro (kerror msg-line . args) `(begin *************** *** 89,103 **** (define duplicate-symbols (lambda ( list ) (unless (null? list) ! (when (memq (car list) (cdr list)) ! (cons (car list) ( duplicate-symbols (cdr list))))))) (define id ! (lambda (name access-foo control) ! (list name access-foo control))) (define id-name car) (define id-access cadr) (define id-control caddr) --- 80,93 ---- (define duplicate-symbols (lambda ( list ) (unless (null? list) ! (when (memq (car list) (cdr list)) (cons (car list) ( duplicate-symbols (cdr list))))))) (define id ! (lambda (name access control) ! (list name access control))) (define id-name car) (define id-access cadr) (define id-control caddr) *************** *** 125,142 **** (cdddr cadddr . cddddr))) (define add-car ! (lambda (access-foo) ! (let ((x (and (pair? access-foo) (assq (car access-foo) c...rs)))) (if (null? x) ! `(car ,access-foo) ! `(,(cadr x) ,@(cdr access-foo)))))) (define add-cdr ! (lambda (access-foo) ! (let ((x (and (pair? access-foo) (assq (car access-foo) c...rs)))) (if (null? x) ! `(cdr ,access-foo) ! `(,(cddr x) ,@(cdr access-foo)))))) (define checkpat --- 115,132 ---- (cdddr cadddr . cddddr))) (define add-car ! (lambda (access) ! (let ((x (and (pair? access) (assq (car access) c...rs)))) (if (null? x) ! `(car ,access) ! `(,(cadr x) ,@(cdr access)))))) (define add-cdr ! (lambda (access) ! (let ((x (and (pair? access) (assq (car access) c...rs)))) (if (null? x) ! `(cdr ,access) ! `(,(cddr x) ,@(cdr access)))))) (define checkpat _Greg J. Greg Davidson Institute for Software Research and Development +1 (619) 452-8059 6231 Branting Street San Diego, CA 92122 USA greg@vis.com ucbvax--| telesoft--| vis!greg@nosc.mil decvax--+---ucsd----+--vis vis!greg@ucsd.edu ihnp4--| nosc----|