Okay. I think it is strange, but feel free to do that and revert my change. Apologies for the confusion.
The use case I was actually doing was like this: [(list '+ (app parse lhs) (app parse rhs)) ...] [(list 'fun (list (? symbol? arg) ...) (app parse body)) ...] And when you gave it a '(fun () ...) it would try to parse the '() in the fun as the lhs of a + and then throw an exception and crash the whole match. Jay On Wed, Oct 5, 2011 at 7:39 PM, Sam Tobin-Hochstadt <sa...@ccs.neu.edu> wrote: > On Wed, Oct 5, 2011 at 5:13 PM, Jay McCarthy <jay.mccar...@gmail.com> wrote: >> >> Basically, it calls the app function on the second element of the list >> even though the head of the list has failed to pattern match. > > This is not a bug. `match' makes no guarantee about the order in > which it checks elements of the pattern. If it were to try to support > this kind of use case, it would have to specify how many times it > would call each function that might be embedded in a match, which > requires a detailed semantics of backtracking in the matcher, and lock > in a particular implementation. > > I will clarify the documentation to say that you shouldn't use > functions that aren't safe to call 0, 1, or more times, in various > orders, inside `match' patterns. > -- > sam th > sa...@ccs.neu.edu > -- Jay McCarthy <j...@cs.byu.edu> Assistant Professor / Brigham Young University http://faculty.cs.byu.edu/~jay "The glory of God is Intelligence" - D&C 93 _________________________________________________ For list-related administrative tasks: http://lists.racket-lang.org/listinfo/dev