How would you match a range with current functionality or is there a workaround ? (please see issue https://github.com/kmsquire/Match.jl/issues/4)
Le jeudi 24 octobre 2013 14:29:30 UTC+2, [email protected] a écrit : > > Nice! Looks like most features are supported already. > > For ranges, you have to decide whether to support non-integer values, > which is trickier because of the bounds. > > > Regards > > Le jeudi 24 octobre 2013 14:13:42 UTC+2, Kevin Squire a écrit : >> >> I think you can actually do this in scala as well. Anyway, I ended up >> making a package which handles most of this: >> >> https://github.com/kmsquire/Match.jl >> >> It doesn't handle ranges in this way yet, but that shouldn't be too hard >> to add. Thanks for the suggestion! >> >> Cheers! >> >> Kevin >> >> On Wednesday, October 23, 2013, wrote: >> >>> Sorry for bumping such an old thread, but I thought Rust's match may be >>> worth taking inspiration from. While similar to Scala's, it is especially >>> interesting for the fact that its syntax allows to easily specify >>> several values or ranges (incredibly useful to recode data with a readable >>> syntax): >>> >>> match my_number { >>> 0 => println("zero"), >>> 1 | 2 => println("one or two"), >>> 3..10 => println("three to ten"), >>> _ => println("something else") >>> } >>> >>> Of course in Julia ranges would rather be written using : . Allowing to >>> specify whether bounds are included or excluded from the range could be >>> useful, but maybe this would create too much a specific syntax to be worth >>> it. >>> >>> Another feature Rust provides is that the compiler checks that all possible >>> cases have been considered, or that a _ branch has explicitly been used. >>> >>> >>> >>> For more details: >>> http://static.rust-lang.org/doc/0.8/tutorial.html#pattern-matching >>> >>> >>> My two cents >>> >>> >>> Le mardi 18 décembre 2012 18:41:51 UTC+1, Stefan Karpinski a écrit : >>>> >>>> That would be cool. I could see having both switch and match – the >>>> former for computed goto and the latter for pattern matching. >>>> >>>> >>>> On Tue, Dec 18, 2012 at 12:37 PM, Kevin Squire <[email protected]> >>>> wrote: >>>> >>>>> I'm looking forward to what you come up with, Toivo. >>>>> >>>>> I've been thinking about this for a while as well, and would love to >>>>> see something like Scala's match statement, which I have found to be an >>>>> elegant way of matching almost any type. In Julia, it would probably >>>>> look >>>>> something like this; >>>>> >>>>> >>>>> type Card >>>>> num::Int8 >>>>> suit::Stringend >>>>> # Note: American card names >>>>> name(c::Card) = match(c) >>>>> case Card(1, _) "Ace" end # _ used as a catch all, though could >>>>> be a variable >>>>> case Card(11,_) "Jack" end >>>>> case Card(12,_) "Queen" end >>>>> case Card(13,_) "King" end >>>>> case Card(n, _) string(n) end # n takes on card valueend >>>>> >>>>> hearts_points(c::Card) = match(c) >>>>> case Card(12, "spades") 13 end >>>>> case Card(_, "spades") 1 end >>>>> case Card(n, "diamonds") # not really necessary, just wanted >>>>> n > 9 && n < 11 ? -10 : 0 # to show a match and variable subst. >>>>> end >>>>> case Card(_, _) 0 endend >>>>> >>>>> It works as a general switch statement as well. >>>>> >>>>> All of the above could be done in other ways, of course, but I >>>>> personally find this syntax quite appealing. >>>>> >>>>> Kevin >>>>> >>>>> On Sunday, December 16, 2012 5:18:08 AM UTC-8, Toivo Henningsson wrote: >>>>>> >>>>>> >>>>>> >>>>>> On Sunday, December 16, 2012 2:02:18 PM UTC+1, Stefan Karpinski wrote: >>>>>>> >>>>>>> That could also be a worthwhile language addition. I'm not sure if >>>>>>> the two can be made to coincide though – pattern matching and computed >>>>>>> goto >>>>>>> are really very different under the hood and trying to squeeze both >>>>>>> into >>>>>>> the same feature might or might not work well. >>>>>> >>>>>> >>>>>> I think you are most probably right, but we will not know for sure >>>>>> until at least both have been implemented. >>>>>> If you do add a switch statement to julia, I might very well hijack >>>>>> the syntax to invoke the pattern matching version though :) e.g. >>>>>> >>>>>> @match switch >>>>>> ... >>>>>> end >>>>>> >>>>>> -- >>>>> >>>>> >>>>> >>>> >>>>
