[racket] (define (f (x y)) body) when y has a previous definition

From: Tony Garnock-Jones (tonyg at ccs.neu.edu)
Date: Mon Jun 23 09:29:19 EDT 2014

On 06/23/2014 09:21 AM, Joshua TAYLOR wrote:
>> (define y 2)
>> (define (f (x y))
>     (print x)
>     (print y))
> 
> Is this expected?

You've stumbled across Racket's syntax for default values for arguments,
a.k.a. optional arguments. [1]

If I write

(define (myproc [x "hello"]) ...)

then if I call myproc with one argument, then x takes the value of that
argument, and if I call myproc with no arguments, then x takes its
default -- "hello".

Your function,

(define (f [x y]) ...)

says "if x is omitted at the call site, then bind x to the value of the
variable y for the body of f".

Regards,
  Tony

[1]
http://docs.racket-lang.org/guide/contracts-general-functions.html?q=optional#%28part._contracts-optional%29

Posted on the users mailing list.