Re: Slice patterns in Nightly Rust

2015-06-21 Thread Nicholas Wilson via Digitalmars-d

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.


Re: Slice patterns in Nightly Rust

2015-06-21 Thread QAston via Digitalmars-d

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.


Like, every modern language has a notion of closed iteration 
abstraction (Ranges, Java streams, Clojure seqs, .net LINQ, 
etc...). Many also have slicing: go, python, rust, ml...


It's time to get over thinking those are unique :)

What you linked here is a tutorial for pattern matchig on slices 
(which is a feature unrelated to D as it doesn't have pattern 
matching)- the doc for slices themselves is here:


http://doc.rust-lang.org/nightly/std/slice/


Re: Slice patterns in Nightly Rust

2015-06-21 Thread Tobias Müller via Digitalmars-d
Nicholas Wilson iamthewilsona...@hotmail.com wrote:
 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
 }
 } 
 [...]
 Also implicit declaration of variables. Urgh.

Patterns are the way that variables are declared in Rust, there's nothing
implicit about that.

let pattern = expr;

match expr
{
pattern = expr,
pattern = expr,
}

fn myfunction(pattern, pattern)

And AFAIK those are the only places where patterns appear and where
variables are declared.

Tobi


Slice patterns in Nightly Rust

2015-06-20 Thread Dennis Ritchie via Digitalmars-d

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.


Re: Slice patterns in Nightly Rust

2015-06-20 Thread via Digitalmars-d

On Sunday, 21 June 2015 at 03:23:18 UTC, Dennis Ritchie wrote:
I see this competition slices of D. Also seen are not very 
clear design.


It functional programming using pattern matching over arrays. It 
is very clear, but perhaps not frequently needed.




Re: Slice patterns in Nightly Rust

2015-06-20 Thread Israel via Digitalmars-d

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.


Jesus Christ, that syntax...