Slice patterns in Nightly Rust

Nicholas Wilson via Digitalmars-d digitalmars-d at puremagic.com
Sun Jun 21 01:21:23 PDT 2015


On Sunday, 21 June 2015 at 03:23:18 UTC, Dennis Ritchie wrote:
> Recently published documentation Nightly Rust. I saw this:
> https://doc.rust-lang.org/nightly/book/slice-patterns.html
>
> What do you think about this: a terrible thing or a cool 
> feature?
>
> fn is_symmetric(list: &[u32]) -> bool {
>     match list {
>         [] | [_] => true,
>         [x, inside.., y] if x == y => is_symmetric(inside),
>         _ => false
>     }
> }
>
> fn main() {
>     let sym = &[0, 1, 4, 2, 4, 1, 0];
>     assert!(is_symmetric(sym));
>
>     let not_sym = &[0, 1, 7, 2, 4, 1, 0];
>     assert!(!is_symmetric(not_sym));
> }
>
> http://is.gd/TvrXSn
>
> I see this competition slices of D. Also seen are not very 
> clear design.

We can do this in D:

bool is_symmetric(T)(T[] arr)
{
     if (arr.length == 0 || arr.length == 1)
         return true;

     if (arr[0] == arr[$])
         return is_symmetric(arr[1..$-1]);

     return false;
}

and generally match subranges using strides:

     arr[stride..index]
where both stride and index can be arbitrary expressions.
and in higher dimensions with Ilya's and Joakim libraries.

Also implicit declaration of variables. Urgh.


More information about the Digitalmars-d mailing list