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

Re: On optional arguments

David Van Horn wrote:
I agree that this SRFIs current optional arguments specification is cognitively cumbersome.

Because of the (=? cmp)-short cut?

Beyond the cognitive burden, it also makes static analysis of code
> very difficult.

Why is that?

I also agree comparisons should be the first argument (if used), and I'm not averse to requiring the compare procedure, but I realize it's verbose.

Would the following work as a reasonable compromise?

procedure:  ((=? [ compare ])  x y )
This has the added benefit(?) that you can now drop `?' since =, <, >, <=, >= are not defined on 0 or 1 arguments, thus:

(= 1 2)   ;; performs a test with R5RS semantics.
((=) 1 2) ;; performs a test with SRFI-67 semantics.

This costs an extra function application per comparision. Personally,
I'd rather remove the (=? cmp) short cut than pay an extra cost per

The only situation in which I would specialize =? with respect to
a fixed comparion function, is when the specialized comparison
is used twice or more. In that situation a LET is needed, so
whether I have to write

  (let ([my=? (=? my-cmp)])
    ... (my=? a b) ...
    ... (my=? c d) ...)


  (let ([my=? (cut =? my-cmp <> <>)])
    ... (my=? a b) ...
    ... (my=? c d) ...)

isn't terribly important to me.

Jens Axel Søgaard