Agreed. I wonder if we couldn't find a way to mirror the distinction between (define x ...) and (define (x) ...) somehow, combining the functionality of match-define and define/match. After all, we don't have define-var and define-fun, right?
(match/define (list x y z) '(1 2 3)) x --> 1 (match/define (do-x (list 2 _ y)) (list 1 2 y)) (do-x '(2 3 4)) --> '(1 2 4) where the second one expands into (define do-x (match-lambda [(list 2 _ y) ...])) or something like that. Too bad there's ambiguity... Robby Findler <ro...@eecs.northwestern.edu> writes: > For the record, I find having two things that combine match and define > in different ways where the name difference is - vs / and swapping the > order of the words to be quite unfortunate. > > Plus, we should just have match built into all of the binding forms. > > Robby > > On Tue, Oct 16, 2012 at 5:48 PM, Eli Barzilay <e...@barzilay.org> wrote: >> A few minutes ago, Matthias Felleisen wrote: >>> >>> Eli, can you explain again -- perhaps in different words -- why >>> define/match is a bad name? I understand that we have match-define >>> and define/match now. While I agree that having two of these forms >>> with remotely related functionality is possibly confusing, I don't >>> see why match-define is really a better kind of name than >>> define/match. >> >> Well, I suggested `match-define' (before I realized that there was >> already one) because it follows the same naming convention for the >> rest of the library. >> >> >>> If you are saying, that define/match is bad because it is too >>> distinct from match-define I understand the name argument. >> >> If that was the only issue, then I wouldn't have objected so strongly >> to it -- but the fact that there *is* an existing `match-define', and >> the fact that it does something different, mean that the match >> interface becomes extremely confusing. And that's not only for >> newbies -- I can easily see myself not remembering which one of them >> is doing which job. >> >> >> A bit later, John Clements wrote: >>> >>> Violent agreement; I'm saying that the *names* are the same (modulo >>> a stylistic choice), not that the meanings are the same. >> >> As for an attempt to explain why they're a bad combination, John >> indeed put it nicely here. We have two forms whose meaning is a >> combination of a `define' and a `match', and hanging the difference on >> the order of the two terms (and a `/' vs a `-') means that for human >> readers, the difference is far from apparent. >> >> And Matthias Felleisen added: >>> >>> (I really dislike match-define. But it's historic so we're stuck.) >> >> I completely agree -- I'd prefer a `define-match' or a `define/match', >> in the same way that I'd also prefer a `let-match' etc. (And I also >> agree that the historic choice is an important restriction.) >> >> -- >> ((lambda (x) (x x)) (lambda (x) (x x))) Eli Barzilay: >> http://barzilay.org/ Maze is Life! >> _________________________ >> Racket Developers list: >> http://lists.racket-lang.org/dev > _________________________ > Racket Developers list: > http://lists.racket-lang.org/dev _________________________ Racket Developers list: http://lists.racket-lang.org/dev