Re: Superfluous actual arguments Joo ChurlSoo (14 Apr 2006 15:15 UTC)
Re: Superfluous actual arguments Marc Feeley (14 Apr 2006 16:31 UTC)
Re: Superfluous actual arguments Eli Barzilay (14 Apr 2006 18:20 UTC)

Re: Superfluous actual arguments Joo ChurlSoo 14 Apr 2006 15:15 UTC

 * From: Marc Feeley <xxxxxx@iro.umontreal.ca>
 | This is the behaviour specified by DSSSL and the example is correct  (the
 | first value given for parameter "k" has precedence over the  second value
 | given).  The ability to provide the value of a named  parameter more than once
 | is useful for implementing wrapper functions  that override the default value
 | of a named parameter.  Here's a  simple example:

 | (define (debug f)
   (lambda args
     (apply f (append args (list debug: #t)))))

 | (define (foo x y #!key (debug #f) (port (current-output-port)))
   (if debug
       (display "foo\n" port))
   (display (string-append "x+y=" (number->string (+ x y)) "\n") port))

 | (define (bar x #!key (debug #f) (port (current-output-port)))
   (if debug
       (display "bar\n" port))
   (display (string-append "log(x)=" (number->string (log x)) "\n")  port))

 | (define dfoo (debug foo))
 | (define dbar (debug bar))

 > (foo 1 2)
 | x+y=3
 > (foo 1 2 debug: #t)
 | foo
 | x+y=3
 > (dfoo 1 2)
 | foo
 | x+y=3
 > (dfoo 1 2 debug: #f)
 | x+y=3
 > (dfoo 1 2 unknown-param: #f)
 | *** ERROR -- Unknown keyword argument passed to procedure
 | (foo 1 2 unknown-param: #f debug: #t)

I think it is better that foo has rest parameter to consume the redundant
arguments even if the rest parameter is not used in the definition of the
procedure.

Even though it has rest parameter, such a function is possible.  And it
seems to be a more clear syntax.

--
Joo ChurlSoo