From d44a0d12b4afd7ffa589a26d79b2062b65c5dc5d Mon Sep 17 00:00:00 2001 From: Andy Wingo Date: Fri, 21 May 2010 23:35:24 +0200 Subject: [PATCH] define* in record-constructor * module/ice-9/boot-9.scm (record-constructor): Use define*. --- module/ice-9/boot-9.scm | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/module/ice-9/boot-9.scm b/module/ice-9/boot-9.scm index 4a115eabf..b4ea43f93 100644 --- a/module/ice-9/boot-9.scm +++ b/module/ice-9/boot-9.scm @@ -717,17 +717,16 @@ If there is no handler at all, Guile prints an error and then exits." (struct-ref obj (+ 1 vtable-offset-user)) (error 'not-a-record-type obj))) -(define (record-constructor rtd . opt) - (if (null? opt) +(define* (record-constructor rtd #:optional field-names) + (if (not field-names) (struct-ref rtd (+ 2 vtable-offset-user)) - (let ((field-names (car opt))) - (primitive-eval - `(lambda ,field-names - (make-struct ',rtd 0 ,@(map (lambda (f) - (if (memq f field-names) - f - #f)) - (record-type-fields rtd)))))))) + (primitive-eval + `(lambda ,field-names + (make-struct ',rtd 0 ,@(map (lambda (f) + (if (memq f field-names) + f + #f)) + (record-type-fields rtd))))))) (define (record-predicate rtd) (lambda (obj) (and (struct? obj) (eq? rtd (struct-vtable obj)))))