Why wouldn't you write that match like this: (match .. [`(+ ,lhs ,rhs) (make-plus (parse lhs) (parse rhs))] [`(fun (,(? symbol arg) ...) ,body) (make-fun arg (parse body))])
Robby On Wed, Oct 5, 2011 at 9:48 PM, Jay McCarthy <jay.mccar...@gmail.com> wrote: > 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 _________________________________________________ For list-related administrative tasks: http://lists.racket-lang.org/listinfo/dev