greg@vis.UUCP (04/15/91)
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----|markf@zurich.ai.mit.edu (Mark Friedman) (04/16/91)
Please excuse me for sending this MIT Scheme specific message to this
group, but I am responding to a message originally sent to this group.
I have referred followups to comp.lang.scheme.c.
In article <9104150751.AA14915@ifsrad> greg@vis.UUCP writes:
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):
I have placed a version of extend-syntax which fixes the bugs that
Greg fixed as well as fixing some other things in
archive/scheme-library/unsupported/CScheme/extend-syntax.scm available
for anonymous FTP from altdorf.ai.mit.edu.
This version allows you to load a file which contains an extand-syntax
form and have it be available for use in that file, other files and in
your REP loops (i.e. anyplace that uses a syntax table that is a child
of user-initial-syntax-table). It also doesn't require all of your
macros transformation functions to contain a copy of the SYNTAX-MATCH?
procedure.
No warrantees expressed or implied.
-Mark
--
Mark Friedman
MIT Artificial Intelligence Lab
545 Technology Sq.
Cambridge, Ma. 02139
markf@zurich.ai.mit.edu