Path: utzoo!utgpu!water!watmath!clyde!att!ucbvax!husc6!rice!titan!dorai From: dorai@titan.rice.edu (Dorai Sitaram) Newsgroups: comp.lang.scheme Subject: Non-upward-compatibility of Chez Scheme versions Keywords: define-macro!, expansion patterns, closures Message-ID: <1709@kalliope.rice.edu> Date: 24 Jul 88 21:30:40 GMT Sender: usenet@rice.edu Reply-To: dorai@titan.rice.edu (Dorai Sitaram) Organization: Rice University, Houston Lines: 32 `define-macro!', the form used to define macros in older versions of Chez Scheme [TM, Cadence Research Systems] is also provided in the current version (along with the fancier `extend-syntax'/`with'). However, the older version (v.1.1, 1985) seems more powerful (expressive) than the current one (v.2.0.3, 1987)! In the old case, it is possible to specify not just text but closures in a "macro"'s expansion pattern. For example, the following almost pointless program, (let ([null? null?]) (define-macro! nil? (x) `(,null? ,x)) ; note comma before null? works fine in v.1.1, `nil?' being a macro version of `null?'. As motivation for using the closure `null?' rather than the variable `null?' in the above macro expansion, one might consider that the global variable `null?' can now be redefined to something else, but `nil?' will always test for nil-ness. This ruse doesn't work in v.2.0.3: The program (nil? 7) yields the diagnostic: Error: nonsensical application (# 7). Anyone know why Cadence (Dybvig?) thought fit to do away with the old Chez's more powerful macros? {I don't know Cadence's e-mail address.} --dorai ps: It might be argued that there might be newer ways (possibly using `extend- syntax'/`with') to get the effect described above, if not with the same program fragment. Nope. There just doesn't seem a way to get closures in the expansion pattern in new Chez.