[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Scheme-reports] Formal definitions [con'd]

Alex Shinn <alexshinn@x> wrote:

> On Fri, Nov 30, 2012 at 8:29 AM, Jean-Michel HUFFLEN
> <jmhuffle@x>wrote:
> (...)
>> - p. 71, "make-parameter": your definition accepts any positive number
>> of arguments with :
>> (define (make-parameter init . o) ...)
>> Why not using "case-lambda", for "make-parameter" as well as its
>> result?
> Because this is actually longer than the cond version.

    OK. But I would remark that in your version, you do not check that  
there is no additional information which would be useless. If we do  
that, that is:

(define (make-parameter init . o)
   (let* ((converter (cond ((null? o) values)
                           ((pair? (cdr o)) (error "bad parameter syntax"))
                           (else (car o))))
          (values (converter init)))
     (lambda args
       (cond ((null? args) value)
             ((and (eq? (car args) <param-set!>) (pair? (cdr args))
                   (null? (cddr args)))
              (set! value (cadr args)))
             ((and (eq? (car args) <parameter-convert>) (null? (cdr args)))
             (else (error "bad parameter syntax"))))))

the result is still shorter than the version using "case-lambda", but  
just slightly shorter.

    Yours sincerely,


This message was sent using IMP, the Internet Messaging Program.

Scheme-reports mailing list