[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: records
From: |
David Van Horn |
Subject: |
Re: records |
Date: |
Sun, 28 Mar 2004 13:30:49 -0500 |
User-agent: |
Mozilla/5.0 (X11; U; SunOS sun4u; en-US; rv:1.6b) Gecko/20031206 Thunderbird/0.4 |
Ian Zimmerman wrote:
Instead, I itch to write
(let ((foo-rtd (make-record-type "foo" 'bar 'baz)))
(define foo? (record-predicate foo-rtd))
...)
but this of course doesn't work because the define is local.
This is actually a Scheme FAQ:
4.9 Is there a way to define top-level closures?
http://www.schemers.org/Documents/FAQ/#N108F7
What is the idiomatic way to do this?
You could use a macro:
(define-syntax define-with
(syntax-rules ()
((define-with ((i1 v1) ...) (i2 v2) ...)
(begin
(define i2 #f) ...
(let ((i1 v1) ...)
(set! i2 v2) ...)))))
Allowing you to write:
(define-with ((foo-rtd (make-record-type "foo" 'bar 'baz)))
(foo? (record-predicate foo-rtd))
...)
David
- records, Ian Zimmerman, 2004/03/26
- Re: records, Kevin Ryde, 2004/03/27
- Re: records,
David Van Horn <=